我尝试映射这两个数据帧,但失败了。也许是因为列名和它的值有点不同。
我想创建一个像 dfNew 一样的新数据框。
df
Employee ID Employee Name Activity Month
A0001 John Smith Apr-19
A0002 Will Cornor Apr-19
A0001 John Smith May-19
A0003 David Teo May-19
A0001 John Smith May-19
A0002 Will Cornor Jun-19
A0001 John Smith Jun-19
df2
Month Bonus
2019-04-01 5000
2019-05-01 4000
2019-06-01 6000
dfNew
Employee ID Employee Name Activity Month Bonus
A0001 John Smith Apr-19 5000
A0002 Will Cornor Apr-19 5000
A0001 John Smith May-19 4000
A0003 David Teo May-19 4000
A0001 John Smith May-19 4000
A0002 Will Cornor Jun-19 6000
A0001 John Smith Jun-19 6000
最佳答案
使用Series.dt.strftime
fr 更改日期时间
的格式,这样可能Series.map
:
s = df2.set_index(df2['Month'].dt.strftime('%b-%y'))['Bonus']
df1['Bonus'] = df1['Activity Month'].map(s)
print (df1)
Employee ID Employee Name Activity Month Bonus
0 A0001 John Smith Apr-19 5000
1 A0002 Will Cornor Apr-19 5000
2 A0001 John Smith May-19 4000
3 A0003 David Teo May-19 4000
4 A0001 John Smith May-19 4000
5 A0002 Will Cornor Jun-19 6000
6 A0001 John Smith Jun-19 6000
或者使用DataFrame.merge
与 DataFrame.pop
对于删除原始列的新列:
df2['Activity Month'] = df2.pop('Month').dt.strftime('%b-%y')
df1 = df1.merge(df2, on='Activity Month', how='left')
关于python - Pandas 从具有不同列名的 2 个数据帧映射数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58603063/