Pandas合并两个数据框并求和值。

3
假设我有两个数据框,其中部分条目重复:
source1=pandas.DataFrame({'key':['a','b'],'value':[1,2]})
#  key  value
#0   a      1
#1   b      2
source2=pandas.DataFrame({'key':['b','c'],'value':[3,0]})
#  key  value
#0   b      3
#1   c      0

我需要做什么才能使用 source1source2 生成以下条目的结果帧:

#  key  value
#0   a      1
#1   b      5
#2   c      0
2个回答

4
只需要加上即可。
source1.set_index('key').add(source2.set_index('key'), fill_value=0)

如果key已经是索引,直接使用。
source1.add(source2, fill_value=0)

如果您不想将 key 作为索引,则最后可能需要使用 .reset_index()


1
那就是我的确切解决方案。 - Scott Boston
1
比我的第一次尝试好多了,+1。 - timgeb
1
谢谢大家的意见!;} - rafaelc
1
请注意,这假设关键列没有重复项(这在这里可能是一个合理的假设)。 - timgeb

3

使用分组:

>>> pd.concat([source1, source2]).groupby('key', as_index=False).sum()
  key  value
0   a      1
1   b      5
2   c      0

2
另一个不错的选择。 - Scott Boston
1
我已经更改了答案,因为我能够将其与具有超过2列的框架以及除加法之外的其他操作一起重复使用。因此,这是更通用的方法。很抱歉我在原始问题中忽略了这一点。 - Dimitry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接