pandas dataframe按多字段分组对指定字段求和的实现方法
解决方案
你遇到的格式不符合问题大多是groupby默认将分组字段转为索引导致的,调整参数即可得到符合要求的结果,完整操作步骤如下:
- 若你已将原始数据读入为pandas的DataFrame对象
df,先确保actual字段为数值类型,避免求和报错:
import pandas as pd # 转换actual为数值类型,异常值转为空值 df['actual'] = pd.to_numeric(df['actual'], errors='coerce')
- 分组求和并保持分组字段为普通列,匹配目标表格式:
默认情况下pd.groupby会把传入的分组字段设为结果的行索引,不会作为普通列逐行输出,加上as_index=False参数即可解决该问题:
# as_index=False 强制分组键保留为普通列,每行会完整展示分组字段取值 result_df = df.groupby(['segment', 'group', 'date'], as_index=False)['actual'].sum()
- 如果需要显式指定聚合后的字段名(避免出现默认后缀),可改用
agg写法:
result_df = df.groupby(['segment', 'group', 'date'], as_index=False).agg( actual=('actual', 'sum') )
执行上述代码后输出的result_df就是你需要的目标结果表格式。
内容的提问来源于stack exchange,提问作者gunnur
相关产品推荐
相关产品推荐

