因此,假设我有df_1
import pkg.emailing # 1
from pkg.emailing import email # 2
和df_2
Day Month Amt
--------------- --------- ---------
Monday Jan 10
Tuesday Feb 20
Wednesday Feb 30
Thursday April 40
Friday April 50
我想在进行左合并时得到以下结果:
Month Amt
--------------- ---------
Jan 999
Feb 1000000
April 123456
因此,基本上,右表中的'Amt'值将替换左表中的'Amt'值(如果适用)。
当我尝试
Day Month Amt
--------------- --------- ---------
Monday Jan 999
Tuesday Feb 1000000
Wednesday Feb 1000000
Thursday April 123456
Friday April 123456
我得到:
df_1.merge(df_2,how = 'left',on = 'Month')
有人知道简单有效的修复方法吗?谢谢!
答案 0 :(得分:3)
此答案纯粹是对重复目标的补充。这是比这更全面的答案。
这个问题有两个部分。
df_2
创建映射。做到这一点的直观方法是
mapping = df_2.set_index('Month')['Amt']
创建一个可以传递给pd.Series.map
但是,我偏爱
mapping = dict(zip(df_2.Month, df_2.Amt))
甚至更钝化
mapping = dict(zip(*map(df_2.get, df_2)))
pandas.Series.map
df_1.Month.map(mapping)
0 999
1 1000000
2 1000000
3 123456
4 123456
Name: Month, dtype: int64
最后,您要将其放入现有数据框中。
df_1.assign(Amt=df_1.Month.map(mapping))
Day Month Amt
0 Monday Jan 999
1 Tuesday Feb 1000000
2 Wednesday Feb 1000000
3 Thursday April 123456
4 Friday April 123456
df_1['Amt'] = df_1.Month.map(mapping)
要最简洁地使用merge
,请删除要替换的列。
df_1.drop('Amt', axis=1).merge(df_2)
Day Month Amt
0 Monday Jan 999
1 Tuesday Feb 1000000
2 Wednesday Feb 1000000
3 Thursday April 123456
4 Friday April 123456