You need to enable JavaScript to run this app. 如何为DataFrame各分组添加小计行并新增全局总计行
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 13:54:06