我需要添加各列的行值并将其存储在相同(或新)数据框中。 例如: 数据框看起来像这样:
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()
,它将更改数据框的尺寸。
答案 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