Pandas DataFrame groupby后如何对第三列相同系统值求和
针对按相同系统维度汇总数值求和的需求,可按你当前分组结果的结构选择对应写法:
具体实现
写法1:初始分组阶段直接加入系统维度(推荐)
不需要等第一次groupby出结果后再二次统计,最开始分组时就把系统列加入分组键,一步得到汇总结果,性能更好:
# 替换为实际业务列名即可: # 原有分组字段:第一次groupby时使用的分组列 # 系统列:第三列存储系统名称的列名 # 待求和数值列:需要做求和统计的数值对应列名 sum_result = df.groupby(["原有分组字段1", "原有分组字段2", "系统列名"])["待求和数值列"].sum().reset_index()
写法2:对已生成的分组结果二次聚合
如果你已经拿到了第一次groupby后的结果数据集,直接对该数据集按系统列再做一次groupby求和即可:
# 假设第一次groupby得到的数据集变量名为df_after_group sum_result = df_after_group.groupby("系统列名")["待求和数值列"].sum().reset_index()
如果第一次groupby后系统名称不在普通列中,而是在多层索引的某一层,用level参数指定对应层级即可:
# 方式A:按索引层级位置指定(索引从0开始计数,比如第三层级就填2) sum_result = df_after_group.groupby(level=2)["待求和数值列"].sum() # 方式B:按索引层级名称指定(更推荐,不需要手动数位置) sum_result = df_after_group.groupby(level="系统列对应的索引层级名")["待求和数值列"].reset_index()
排查小技巧:如果不清楚当前数据集的列名、索引名,可以先运行两行代码确认:
- 查看所有普通列:
print(df_after_group.columns.tolist())- 查看所有索引层级名称:
print(df_after_group.index.names.tolist())
内容的提问来源于stack exchange,提问作者Girija Rani Karetla
相关产品推荐
相关产品推荐

