对 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 中各列的多行值求和 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Pandas Dataframe - 按照Col A分组并对每个组进行求和[C]重复