如何将较大 pandas 数据帧中的单元格替换为较小数据帧中的单元格
问题描述
我有两个 pandas 数据帧:
较小:
较大:
我希望匹配Ticker和Year,然后用较小的数据帧中的数字替换第一列和最后一列中的数字。
我尝试过使用pd.merge,但我只成功地添加了行或列,而没有替换特定的单元格。有人能发布一些代码来实现这一点吗?
解决方案
可以使用merge
WITH LEFT JOIN和suffixes
,然后使用combine_first
WITH RENAME FOR REMOVE_
:
df1 = pd.DataFrame({'Ticker':list('abcdef'),
'Year':[2013,2014,2013,2014,2013,2014],
'C':[7,8,9,4,2,3],
'Last':[1,3,5,7,1,0],
'First':[5,3,6,9,2,4],
'F':list('aaabbb')})
print (df1)
C F First Last Ticker Year
0 7 a 5 1 a 2013
1 8 a 3 3 b 2014
2 9 a 6 5 c 2013
3 4 b 9 7 d 2014
4 2 b 2 1 e 2013
5 3 b 4 0 f 2014
df2 = pd.DataFrame({'First':[4,5,4,5],
'Last':[7,8,9,4],
'Year':[2013,2014,2014,2015],
'Ticker':list('aabc')})
print (df2)
First Last Ticker Year
0 4 7 a 2013
1 5 8 a 2014
2 4 9 b 2014
3 5 4 c 2015
df = df1.merge(df2, suffixes=('_',''), on=['Ticker','Year'], how='left')
df1[['First','Last']] = (df[['First','Last']].combine_first(df[['First_','Last_']]
.rename(columns=lambda x: x.strip('_'))))
print (df1)
C F First Last Ticker Year
0 7 a 4.0 7.0 a 2013
1 8 a 4.0 9.0 b 2014
2 9 a 6.0 5.0 c 2013
3 4 b 9.0 7.0 d 2014
4 2 b 2.0 1.0 e 2013
5 3 b 4.0 0.0 f 2014
相关文章