为了账号安全,请及时绑定邮箱和手机立即绑定

在Pandas中合并2个数据框:在某些列上合并,在其他列上汇总

在Pandas中合并2个数据框:在某些列上合并,在其他列上汇总

隔江千里 2021-03-12 14:15:36
我想合并特定列(键1,键2)上的两个数据框,并汇总另一列(值)的值。>>> df1 = pd.DataFrame({'key1': range(4), 'key2': range(4), 'value': range(4)})   key1  key2  value0     0     0      01     1     1      12     2     2      23     3     3      3>>> df2 = pd.DataFrame({'key1': range(2, 6), 'key2': range(2, 6), 'noise': range(2, 6), 'value': range(10, 14)})   key1  key2  noise  value0     2     2      2     101     3     3      3     112     4     4      4     123     5     5      5     13我想要这个结果:   key1  key2  value0     0     0      01     1     1      12     2     2     123     3     3     144     4     4     125     5     5     13用SQL术语,我想要:SELECT df1.key1, df1.key2, df1.value + df2.value AS valueFROM df1 OUTER JOIN df2 ON key1, key2我尝试了两种方法:方法1concatenated = pd.concat([df1, df2])grouped = concatenated.groupby(['key1', 'key2'], as_index=False)summed = grouped.agg(np.sum)result = summed[['key1', 'key2', 'value']]方法2joined = pd.merge(df1, df2, how='outer', on=['key1', 'key2'], suffixes=['_1', '_2'])joined = joined.fillna(0.0)joined['value'] = joined['value_1'] + joined['value_2']result = joined[['key1', 'key2', 'value']]两种方法都能得到我想要的结果,但是我想知道是否有更简单的方法。
查看完整描述

1 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

我不知道更简单,但是您可以得到更多的简洁:


>>> pd.concat([df1, df2]).groupby(["key1", "key2"], as_index=False)["value"].sum()

   key1  key2  value

0     0     0      0

1     1     1      1

2     2     2     12

3     3     3     14

4     4     4     12

5     5     5     13

但是,根据您对链接操作的容忍度,您可能还是希望将其分成多行(四个趋向于接近我的上限,在本例中为concat-groupby-select-sum)。


查看完整回答
反对 回复 2021-03-24
  • 1 回答
  • 0 关注
  • 193 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号