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

如何为pandas多级索引(multi index)DataFrame添加小计行并优化展示效果

实现方法说明

完全可以仅通过pandas实现该需求,核心思路是构造和原表索引结构对齐的小计行,按分组顺序拼接后利用pandas多级索引的自动合并特性实现美观的展示效果,示例代码如下:


1. 预处理原始数据

首先将原表的分类字段设置为多级索引,方便后续分组操作和自动合并展示:

import pandas as pd

# 模拟你的原始数据
data = {
    'Attribute 1': ['A', 'A', 'A', 'H', 'H', 'H', 'H'],
    'Attribute 2': ['B', 'B', 'C', 'B', 'B', 'C', 'C'],
    'Attribute 3': ['D', 'E', 'F', 'D', 'E', 'F', 'G'],
    'Value': [10, 11, 12, 10, 11, 12, 15]
}
df = pd.DataFrame(data)
# 设置三级多级索引,pandas展示时会自动合并重复的上层索引值
df = df.set_index(['Attribute 1', 'Attribute 2', 'Attribute 3'])

2. 构造小计行并拼接

按Attribute 1分组计算求和结果后,构造和原表索引结构完全对齐的小计行,再按分组顺序拼接:

# 计算分组求和结果
df_sum = df.groupby(level='Attribute 1').sum()

# 构造结构匹配的小计行
subtotal_list = []
for attr1, sum_val in df_sum['Value'].items():
    # 小计行的下层索引留空,上层索引填小计标识,保证结构和原表对齐
    subtotal_list.append(
        pd.Series({'Value': sum_val}, name=(f'Subtotal for {attr1}', '', ''))
    )
df_subtotal = pd.DataFrame(subtotal_list)
df_subtotal.index.names = ['Attribute 1', 'Attribute 2', 'Attribute 3']

# 按分组顺序拼接原数据和对应小计行
df_final = pd.concat([
    pd.concat([group, df_subtotal.loc[[f'Subtotal for {attr1}']]])
    for attr1, group in df.groupby(level='Attribute 1')
])

3. 输出结果

直接打印或者导出Excel即可得到你期望的效果,导出Excel时添加merge_cells=True参数可以保留合并单元格的样式:

# 控制台打印效果和你要求的完全一致
print(df_final)

# 导出到Excel保留合并单元格样式
df_final.to_excel('result.xlsx', merge_cells=True)

内容的提问来源于stack exchange,提问作者Lê Hồng Nhật

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:06:03