【问题标题】:Summing multiple row values of various columns in Pandas [duplicate]对 Pandas 中各列的多行值求和 [重复]
【发布时间】:2019-03-25 02:42:24
【问题描述】:

我需要添加各个列的行值并将其存储在相同(或新)数据框中。 例如: 数据框看起来像这样:

id  col1  col2  col3  col4 ...  col50
 1    1     12    3     44         0
 1    7      0    7      2         10
 1    2      3    0      4         9
 3    9      0    1      0         0
 3    1      1   11      1         0

预期值应该是:

id  col1  col2  col3  col4...  col50
 1    10   15    10    46        19
 3    10    1    12     1         0

如果我使用tmp2 = tmp2.iloc[:,1:50].sum(),它会改变数据框的维度。

【问题讨论】:

  • 您想对每一列的rows 的值求和还是对每列的值分别求和?如果您正在查看这些行的聚合,那么 df.agg(['sum']) .
  • 你应该接受对你有用的答案或至少赞成,已经有同事提供的好答案..
  • @pygo 这正是我的想法!所有的答案都是有效的(其中 3 个提出了同样的问题),接受任何人都是对他人的不公正。让我投票赞成他们而不接受任何。

标签: python pandas dataframe pandas-groupby


【解决方案1】:

这是id分组聚合。因此,使用GroupBy 对象:

res = df.groupby('id', as_index=False).sum()

print(res)

   id  col1  col2  col3  col4  col50
0   1    10    15    10    50     19
1   3    10     1    12     1      0

【讨论】:

    【解决方案2】:

    将pandas groupby() 函数与sum() 结合使用可以解决问题

    df.groupby(['id']).sum()
    

    【讨论】:

      【解决方案3】:

      尝试使用数据透视表并将 id 设置为索引:

      import pandas as pd
      import numpy as np
      
      np.random.seed(1)
      df = pd.DataFrame(np.random.randint(0,3,size=(5, 4)), columns=["ID","A","B","C"])
      print(df)
      

      原始df:

         ID  A  B  C
      0   1  0  0  1
      1   1  0  0  1
      2   0  1  0  2
      3   1  2  0  2
      4   1  2  0  0
      
      pivoted_df = pd.pivot_table(df, index="ID",values=["A","B","C"], aggfunc=np.sum)
      print(pivoted_df)
      

      这会返回:

          A  B  C
      ID         
      0   1  0  2
      1   4  0  4
      

      【讨论】:

        【解决方案4】:

        groupby 使用单个分组列、单个聚合函数的另一种方法。

        >>> df.groupby('id').agg('sum')
            col1  col2  col3  col4  col50
        id
        1     10    15    10    50     19
        3     10     1    12     1      0
        

        但是,agg 可以使用sum()mean()max() 等,但是它也将促进多个聚合函数,例如agg(['sum', 'mean'])agg(['min', 'max'])

        【讨论】:

          猜你喜欢
          • 2017-05-18
          • 2019-01-25
          • 1970-01-01
          • 2021-08-02
          • 2013-06-28
          • 2017-08-09
          • 2018-07-27
          • 1970-01-01
          • 2013-12-20
          相关资源
          最近更新 更多