对 Pandas 中各列的多行值求和 [重复]

Posted

技术标签:

【中文标题】对 Pandas 中各列的多行值求和 [重复]【英文标题】:Summing multiple row values of various columns in Pandas [duplicate] 【发布时间】: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 个提出了同样的问题),接受任何人都是对他人的不公正。让我投票赞成他们而不接受任何。 【参考方案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'])

【讨论】:

以上是关于对 Pandas 中各列的多行值求和 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何聚合数据框并通过 r 中的重复行对列的值求和

Pandas Dataframe - 按照Col A分组并对每个组进行求和[C]重复

R 中各列的平均值,不包括 NA

急!!Eclipse中使用tableviewer,如何自动调整表中各列的列宽??

Pandas - 计算每列的不同值[重复]

根据多个条件将新列添加到 Python Pandas DataFrame [重复]