汇总熊猫中各个列的多个行值

时间:2018-10-20 11:52:31

标签: python pandas dataframe pandas-groupby

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

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(),它将更改数据框的尺寸。

4 个答案:

答案 0 :(得分:4)

结合使用groupby()大熊猫功能和sum()可以达到目的

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

答案 1 :(得分:3)

这是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 :(得分:2)

使用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'])

答案 3 :(得分:1)

尝试使用数据透视表并将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