如何合并两个数据框并对列的值求和

20

我有两个数据框。

df1
Name class value
Sri   1     5
Ram   2     8
viv   3     4

df2
Name class value
Sri   1     5
viv   4     4

我的期望输出是:

df,

Name class value
Sri   2     10
Ram   2     8
viv   7     8

请帮忙,谢谢!


你只是提到了需求,你尝试过什么吗? - Sachin G.
2个回答

21

我认为需要使用set_index将两个DataFrame都设置索引,然后再使用add和最后一个reset_index函数:

df = df1.set_index('Name').add(df2.set_index('Name'), fill_value=0).reset_index()
print (df)
  Name  class  value
0  Ram    2.0    8.0
1  Sri    2.0   10.0
2  viv    7.0    8.0

如果 Name 列中的值不唯一,可以使用 groupby 和聚合函数 sum:

df = df1.groupby('Name').sum().add(df2.groupby('Name').sum(), fill_value=0).reset_index()

我收到了 UserWarning: Boolean Series key will be reindexed to match DataFrame index. 这个警告,该怎么办? - Pyd
@chandru - 你能检查一下是否有重复的索引吗? - jezrael
@chandru - 还有,你的pandas版本是多少? - jezrael
那是一个警告,实际上我遇到了 pandas.core.indexing.IndexingError: Unalignable boolean Series key provided 错误,我的 pandas 版本是 0.19.2。 - Pyd
1
只是为了补充你的答案,如果你已经在两个DataFrame上都有索引,你可以直接使用df=df1.add(df2, fill_value=0) - V. Brunelle
显示剩余3条评论

8
您可以将个别的数据框进行拼接,然后按键列进行分组:
使用 pd.concat 进行拼接,再使用 groupby 进行分组,最后进行求和操作 (sum)。
df = pd.concat([df1, df2])\
       .groupby('Name')['class', 'value']\
       .sum().reset_index()

print(df)

  Name  class  value
0  Ram      2      8
1  Sri      2     10
2  viv      7      8

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