【问题标题】:Pandas DataFrame merge summing columnPandas DataFrame 合并求和列
【发布时间】:2014-04-29 09:50:06
【问题描述】:

我正在尝试合并两个 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

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

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

    >>> 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
    

    【讨论】:

      【解决方案2】:
      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
      

      【讨论】:

      • 如何合并2个以上?我需要联合('外部'合并)。
      【解决方案3】:

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

      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
      

      【讨论】:

      • 为了避免NaN,您可以使用fill_value 来表示其中一个数据框中缺少的名称:df1.add(df2, fill_value=0)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      • 2014-09-25
      • 1970-01-01
      • 2019-11-10
      相关资源
      最近更新 更多