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 合并,当只有一级索引用作键时