如何将较大 pandas 数据帧中的单元格替换为较小数据帧中的单元格 [英] How to replace cells in a larger Pandas dataframe with cells from a smaller dataframe

查看:35
本文介绍了如何将较大 pandas 数据帧中的单元格替换为较小数据帧中的单元格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个 pandas 数据帧:

较小:

较大:

我希望匹配Ticker和Year,然后用较小的数据帧中的数字替换第一列和最后一列中的数字。

我尝试过使用pd.merge,但我只成功地添加了行或列,而没有替换特定的单元格。有人能发布一些代码来实现这一点吗?

推荐答案

可以使用mergeWITH LEFT JOIN和suffixes,然后使用combine_firstWITH 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

这篇关于如何将较大 pandas 数据帧中的单元格替换为较小数据帧中的单元格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆