Pandas DataFrame 合并并求和列

52 投票
3 回答
54891 浏览
提问于 2025-04-18 04:43

我正在尝试把两个DataFrames合并,并且在合并的时候把某些列的数值相加。

>>> print(df1)
   id name  weight
0   1    A       0
1   2    B      10
2   3    C      10

>>> print(df2)
   id name  weight
0   2    B      15
1   3    C      10

我需要在合并时,对共同列中相似的值的weight进行求和。

merge = pd.merge(df1, df2, how='inner')

所以输出的结果会像下面这样。

   id name  weight
1   2    B      25
2   3    C      20

3 个回答

25

如果你把两个数据表中共有的列设置为索引,那么你就可以直接把这两个数据表相加,这样比合并要简单得多。

In [30]: df1 = df1.set_index(['id', 'name'])

In [31]: df2 = df2.set_index(['id', 'name'])

In [32]: df1 + df2
Out[32]: 
         weight
id name        
1  A        NaN
2  B         25
3  C         20
55

这个方法也适用于你想要对多个列进行求和的情况。假设有数据框

>>> df1
   id name  weight  height
0   1    A       0       5
1   2    B      10      10
2   3    C      10      15
>>> df2
   id name  weight  height
0   2    B      25      20
1   3    C      20      30

你可以把它们连接起来,然后按照索引列进行分组。

>>> pd.concat([df1, df2]).groupby(['id', 'name']).sum().reset_index()
   id name  weight  height
0   1    A       0       5
1   2    B      35      30
2   3    C      30      45
26
In [41]: pd.merge(df1, df2, on=['id', 'name']).set_index(['id', 'name']).sum(axis=1)
Out[41]: 
id  name
2   B       25
3   C       20
dtype: int64

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答