这是我的问题,我想在DataFrame中映射字典,但是当字典有多个键时,我找不到解决方法。请注意,这些键位于DataFrame的不同列中。
这里是一个示例:
这是我刚开始使用的数据框df:
Index key
0 10 k1
1 12 k2
2 3 k1
3 34 k3
这是我的字典d:
{('k1', 10):v1,('k1', 3):v2,('k2', 12):v3,('k3', 34):v4}
我想在最后加上df:
Index key value
0 10 k1 v1
1 12 k2 v2
2 3 k1 v3
3 34 k3 v4
有没有一种方法可以像拥有一本字典的方法那样进行:
df [“ value”] = df [“ key”]。map(d)
先谢谢您
答案 0 :(得分:3)
将列表推导与get
一起使用,以返回None
,而没有匹配的值:
df['value'] = [d.get(x) for x in zip(df['key'], df['Index'])]
print (df)
Index key value
0 10 k1 v1
1 12 k2 v3
2 3 k1 v2
3 34 k3 v4
d = {('k1', 10):'v1',('k1', 3):'v2',('k2', 12):'v3'}
df['value'] = [d.get(x) for x in zip(df['key'], df['Index'])]
print (df)
Index key value
0 10 k1 v1
1 12 k2 v3
2 3 k1 v2
3 34 k3 None
答案 1 :(得分:3)
IIUC使用merge
mergedf=pd.Series(d).reset_index()
mergedf.columns=['key','Index','values']
df.merge(mergedf,how='left')
Out[642]:
Index key values
0 10 k1 v1
1 12 k2 v3
2 3 k1 v2
3 34 k3 v4