缺少标签的查找 [英] Lookup with Missing Labels
本文介绍了缺少标签的查找的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个代码,使用数据框在给定列标签(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屋!
查看全文