熊猫:字典中有多个键时,通过映射将列添加

时间:2018-08-27 14:10:50

标签: python pandas dictionary dataframe mapping

这是我的问题,我想在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)

先谢谢您

2 个答案:

答案 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