【问题标题】:How to replace cells in a larger Pandas dataframe with cells from a smaller dataframe如何用较小数据帧中的单元格替换较大 Pandas 数据帧中的单元格
【发布时间】:2018-07-19 20:42:14
【问题描述】:

我有两个熊猫数据框:

更小:

更大:

我想匹配 Ticker 和 Year,然后将 First 和 Last 列中的数字替换为较小数据框中的数字。

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

【问题讨论】:

  • 您可能需要使用pandas.merge,并且该网站上已经有很多关于该功能的问题

标签: pandas replace find conditional


【解决方案1】:

您可以将merge 与左连接和suffixes 一起使用,然后将combine_first 与重命名一起使用以删除_

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

【讨论】:

猜你喜欢
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 2015-01-29
相关资源
最近更新 更多