如何用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
相关产品推荐
相关产品推荐

