You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas DataFrame生成带分级小计的财务汇总表?

Pandas 实现带业务级小计、类型级总计的汇总表

针对你的需求,完全不需要用循环+df.loc的方式,Pandas的分组聚合(groupby)+ 合并(concat)就能高效实现,以下是具体步骤:

1. 模拟测试数据

先构造和你的DataFrame结构一致的测试数据,方便验证效果:

import pandas as pd

# 模拟业务数据
data = {
    'Business': ['电商', '电商', '零售', '零售', '电商', '零售'],
    'Business Type': ['平台', '商家', '线下门店', '线上商城', '平台', '线下门店'],
    'ID': ['A001', 'A002', 'B001', 'B002', 'A003', 'B003'],
    'Value-Q1': [100, 200, 150, 300, 180, 220],
    'Value-Q2': [120, 210, 160, 320, 190, 230],
    'Value-FY': [450, 850, 600, 1200, 700, 800]
}
df = pd.DataFrame(data)

2. 定义聚合规则

先明确需要统计的内容:

  • ID列统计出现次数(用count)
  • 所有Value-*列求和(用sum)
# 定义聚合规则,键是列名,值是聚合方法
agg_rules = {
    'ID': 'count',
    'Value-Q1': 'sum',
    'Value-Q2': 'sum',
    'Value-FY': 'sum'
}

3. 生成基础分组汇总

按Business和Business Type分组,得到各业务类型的基础统计结果:

# 分组聚合,保留列索引
grouped = df.groupby(['Business', 'Business Type'], as_index=False).agg(agg_rules)
# 把ID列重命名为更直观的Count
grouped.rename(columns={'ID': 'Count'}, inplace=True)

4. 添加业务级小计

生成每个Business的小计行,再和基础汇总合并:

# 按Business分组生成小计
subtotals = df.groupby('Business', as_index=False).agg(agg_rules)
subtotals['Business Type'] = '小计'
subtotals.rename(columns={'ID': 'Count'}, inplace=True)

# 合并基础汇总和小计,排序让小计行排在对应业务的最后
combined = pd.concat([grouped, subtotals], ignore_index=True)
# 用临时排序键确保小计行在末尾
combined['sort_key'] = combined['Business Type'].apply(lambda x: 1 if x == '小计' else 0)
combined.sort_values(by=['Business', 'sort_key'], inplace=True)
combined.drop(columns='sort_key', inplace=True)

5. 添加全局总计

生成整个数据集的总计行,合并到最终结果:

# 生成总计行,转置为DataFrame格式
grand_total = df.agg(agg_rules).to_frame().T
grand_total['Business'] = '总计'
grand_total['Business Type'] = ''
grand_total.rename(columns={'ID': 'Count'}, inplace=True)

# 合并得到最终汇总表
final_df = pd.concat([combined, grand_total], ignore_index=True)
final_df.reset_index(drop=True, inplace=True)

最终效果

执行后final_df的输出如下:

Business Business Type Count Value-Q1 Value-Q2 Value-FY
0       电商            平台     2      280      310     1150
1       电商            商家     1      200      210      850
2       电商            小计     3      480      520     2000
3       零售          线下门店     2      370      390     1400
4       零售          线上商城     1      300      320     1200
5       零售            小计     3      670      710     2600
6       总计                   6     1150     1230     4600

方法优势

  • 完全避免循环,利用Pandas内置的向量运算能力,处理大数据量时效率远高于循环
  • 代码可扩展性强:后续扩展月份对比工具时,只需调整agg_rules中的列名或聚合方法即可适配
  • 逻辑清晰,易于维护和修改

内容的提问来源于stack exchange,提问作者user20412841

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:35:44