Pandas:当字典中有多个键时,通过映射添加列

Posted

技术标签:

【中文标题】Pandas:当字典中有多个键时,通过映射添加列【英文标题】:Pandas: adding columns into by mapping when there are several keys in the dictionnary 【发布时间】:2019-02-02 02:31:31 【问题描述】:

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

提前谢谢你。

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

使用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

【讨论】:

以上是关于Pandas:当字典中有多个键时,通过映射添加列的主要内容,如果未能解决你的问题,请参考以下文章

映射两个数据框以创建一个包含多个键值的字典 - Pandas

pandas 与 MultiIndex 合并,当只有一级索引用作键时

当我在循环中添加到字典时有新键时创建一个新列表

按下返回键时如何通过多个文本字段输入进行选项卡?

当同时按下大写锁定和命令键时,keylayout 文件中有啥修饰符?

从字典中添加具有映射值的新熊猫列[重复]