如何对Pandas DataFrame按列分组求和并保留观测数量?
Pandas分组求和并统计行数实现方案
原始数据
import pandas as pd df = pd.DataFrame({'id':[1, 1, 2, 2], 'comp': [-0.10,0.20,-0.10, 0.4], 'word': ['boy','girl','man', 'woman']})
需求说明
按id列分组,计算comp列的总和,同时新增n_obs列统计每组的行数。直接使用df.groupby('id').sum()会错误拼接word列的字符串,无法得到预期结果。
实现方案
方法一:使用agg()指定多列聚合规则
这是最简洁的方式,一次完成两种聚合操作:
result = df.groupby('id', as_index=False).agg( comp=('comp', 'sum'), n_obs=('id', 'count') ) print(result)
as_index=False确保id作为普通列输出,而非索引agg()中分别指定comp列求和、任意列(这里用id)统计行数
方法二:分步聚合后合并
先分别计算求和结果和行数,再通过merge()合并:
# 计算comp列的分组求和 sum_df = df.groupby('id', as_index=False)['comp'].sum() # 统计每组行数并修改列名 count_df = df.groupby('id', as_index=False).size().rename(columns={'size': 'n_obs'}) # 合并两个结果 result = pd.merge(sum_df, count_df, on='id') print(result)
输出结果
id comp n_obs 0 1 0.1 2 1 2 0.3 2
内容的提问来源于stack exchange,提问作者OLGJ
相关产品推荐
相关产品推荐

