Pandas DataFrame合并求和列

Nil*_*age 15 python dataframe pandas

我正在尝试合并两个DataFrames求和列值.

DF1

   id        name        weight        
   1            A        0
   2            B        10
   3            C        10
Run Code Online (Sandbox Code Playgroud)

DF2

   id        name        weight        
   2            B        15
   3            C        10
Run Code Online (Sandbox Code Playgroud)

我需要在合并期间对公共列中的类似值求和权重值.

merge = pd.merge(df1,df2, how='inner')
Run Code Online (Sandbox Code Playgroud)

所以输出将如下所示.

   id        name        weight        
   2            B        25
   3            C        20
Run Code Online (Sandbox Code Playgroud)

Jan*_*ger 29

如果您想对多列求和,此解决方案也适用。假设数据帧

>>> 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
Run Code Online (Sandbox Code Playgroud)

您可以连接它们并按索引列分组。

>>> 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
Run Code Online (Sandbox Code Playgroud)


wai*_*kuo 10

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
Run Code Online (Sandbox Code Playgroud)


jor*_*ris 7

如果将公共列设置为索引,则可以将两个数据帧相加,这比合并要简单得多:

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
Run Code Online (Sandbox Code Playgroud)

  • 为了避免"NaN",你可以在其中一个数据帧中使用`fill_value`来表示缺少的名字:`df1.add(df2,fill_value = 0)` (5认同)