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

如何用Pandas创建合并单元格的表头行(分组聚合实现?)

解决方案:用Pandas多层索引(MultiIndex)实现合并表头

要实现你需要的双层表头结构,核心是利用Pandas的MultiIndex(多层索引)重构DataFrame的列名,具体步骤如下:

步骤1:准备原始数据(示例)

先构造和你提供的结构一致的DataFrame:

import pandas as pd

data = {
    "SKU": ["SKU123", "SKU234", "SKU890"],
    "Product Name": ["Red Wine - Cabernet Sauvignon", "Ros Wine - Pinot Noir", "White Wine - Sauvignon Blanc"],
    "Qty_Wholesale": [0, 4, 0],
    "Subtotal_Wholesale": [0, 79.96, 0],
    "Qty_Retail": [5, 0, 1],
    "Subtotal_Retail": [129.95, 0, 27.99],
    "Qty_Other": [0, 4, 0],
    "Subtotal_Other": [0, 19.99, 0]
}

df = pd.DataFrame(data)

步骤2:重构列名为多层索引

拆分后续列的名称,生成两层表头:

# 处理列名,拆分出层级
new_columns = []
for col in df.columns:
    if col in ["SKU", "Product Name"]:
        # 前两列保持单层索引
        new_columns.append(("", col))
    else:
        # 拆分"_", 格式为(客户组, 指标)
        metric, group = col.split("_")
        new_columns.append((group, metric))

# 设置多层列索引
df.columns = pd.MultiIndex.from_tuples(new_columns)

步骤3:查看结果

此时df的结构就和你需要的目标格式一致:

Wholesale        Retail         Other       
        SKU Product Name      Qty Subtotal      Qty Subtotal     Qty Subtotal
0  SKU123   Red Wine...         0      0.00        5  129.95       0      0.00
1  SKU234   Ros Wine...         4     79.96        0    0.00       4     19.99
2  SKU890   White Wine...       0      0.00        1   27.99       0      0.00

导出报表的注意事项

  • 导出Excel:如果要导出带合并表头的Excel,使用pd.ExcelWriter并开启合并单元格:
    with pd.ExcelWriter("sales_report.xlsx") as writer:
        df.to_excel(writer, index=False, merge_cells=True)
    
  • 导出HTML:Pandas的to_html方法会自动处理MultiIndex的表头合并,直接生成符合需求的HTML表格:
    html_table = df.to_html(index=False)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:22:48