缺少标签的查找 [英] Lookup with Missing Labels

查看:116
本文介绍了缺少标签的查找的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个代码,使用数据框在给定列标签(X)的情况下查找值(P):

I have a code that uses a dataframe to look up a value (P) given it's column label (X):

df_1 = pd.DataFrame({'X': [1,2,3,1,1,2,1,3,2,1]})

df_2 = pd.DataFrame({ 1 : [1,2,3,4,1,2,3,4,1,2],
                      2 : [4,1,2,3,4,1,2,1,2,3],
                      3 : [2,3,4,1,2,3,4,1,2,5]})

df_1['P'] = df_2 .lookup(df_1.index, df_1['X'])

当我在df_1中给它添加标签但不在df_2中包含该标签时,如下所示:

When I give it a label in df_1 but don't include that label in df_2, like this:

df_1 = pd.DataFrame({'X': [7,2,3,1,1,2,1,3,2,1]})

我得到:

KeyError: 'One or more column labels was not found'

我该如何跳过那些,以获得:

How can I skip those ones please, to get:

   X  P
0  7  NaN
1  2  1
2  3  4
3  1  4
4  1  1
5  2  1
6  1  3
7  3  1
8  2  2
9  1  2

推荐答案

get和默认值

get and default values

def get_lu(df):
  def lu(i, j):
    return df.get(j, {}).get(i, np.nan)
  return lu

[*map(get_lu(df_2), df_1.index, df_1.X)]

[nan, 1, 4, 4, 1, 1, 3, 1, 2, 2]


替代

[df_2.get(j, {}).get(i, np.nan) for i, j in df_1.X.items()]

[nan, 1, 4, 4, 1, 1, 3, 1, 2, 2]


在一起

df_1.assign(P=[df_2.get(j, {}).get(i, np.nan) for i, j in df_1.X.items()])

   X    P
0  7  NaN
1  2  1.0
2  3  4.0
3  1  4.0
4  1  1.0
5  2  1.0
6  1  3.0
7  3  1.0
8  2  2.0
9  1  2.0


Uglier版本

df_1.assign(P=[df_2.rename_axis('X', 1).stack().get(x, np.nan) for x in df_1.X.items()])

   X    P
0  7  NaN
1  2  1.0
2  3  4.0
3  1  4.0
4  1  1.0
5  2  1.0
6  1  3.0
7  3  1.0
8  2  2.0
9  1  2.0

这篇关于缺少标签的查找的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆