如何为DataFrame各分组添加小计行并新增全局总计行
实现代码与思路
处理逻辑
- 完整保留输入DataFrame里的所有明细行
- 以地点为维度做分组,为每个分组追加一行对应地点的学生总数小计
- 所有分组处理完成后,在最后追加一行全局学生总数行
完整实现代码
import pandas as pd # 构造和示例完全一致的原始输入 df = pd.DataFrame({ "地点": ["D", "D", "E", "F", "F"], "学生姓名": ["Amy", "Raj", "Mitch", "Poo", "Mack"] }) def add_group_subtotal(group_df): current_group_name = group_df.name # 生成本地点的小计行 subtotal_row = pd.DataFrame({ "地点": [f"{current_group_name}地点学生总数"], "学生姓名": [len(group_df)] }) # 合并当前组的明细和小计行 return pd.concat([group_df, subtotal_row], ignore_index=True) # 逐组处理追加小计 grouped_result = df.groupby("地点", group_keys=False).apply(add_group_subtotal) # 生成全局总计行 global_total_row = pd.DataFrame({ "地点": ["全局总计"], "学生姓名": [len(df)] }) # 拼接得到最终结果 final_df = pd.concat([grouped_result, global_total_row], ignore_index=True)
结果说明
运行上述代码得到的final_df和目标格式完全一致:
地点 学生姓名 0 D Amy 1 D Raj 2 D地点学生总数 2 3 E Mitch 4 E地点学生总数 1 5 F Poo 6 F Mack 7 F地点学生总数 2 8 全局总计 5
可选调整
如果实际业务中地点的展示顺序不符合默认字典序规则,可以在分组处理前给地点列设置自定义的排序规则,避免分组顺序错乱:
# 替换categories为你实际需要的地点顺序 df["地点"] = pd.Categorical(df["地点"], categories=["D", "E", "F"], ordered=True)
内容的提问来源于stack exchange,提问作者Illusionista787
相关产品推荐
相关产品推荐

