如何在Pandas中创建多层级表头并合并对应表头单元格
实现方案
第一步:创建双层多级列索引
你可以直接通过Pandas的MultiIndex接口构造双层表头,示例代码如下:
import pandas as pd # 模拟你现有结构的DataFrame df = pd.DataFrame({ 'Number of words': ['样本1', '样本2', '样本3'], '1': [12, 25, 18], '2': [22, 37, 29], '4': [31, 48, 36] }) # 构造双层列头,元组顺序为(上层表头名, 下层表头名) new_cols = pd.MultiIndex.from_tuples( [ ("", "Number of words"), # 第一列上层表头留空 ("worker/node", "1"), ("worker/node", "2"), ("worker/node", "4") ] ) # 替换原有列头 df.columns = new_cols
运行后你就可以得到双层结构的表头,1/2/4三个列会共享上层表头worker/node。
第二步:实现单元格合并
根据你使用的场景,有两种常见的实现方式:
- 场景1:导出到Excel文件
可以借助openpyxl处理Excel单元格合并,代码如下:
from openpyxl import load_workbook # 先将DataFrame导出到Excel,保留索引并设置索引标签为Index df.to_excel("output.xlsx", index=True, index_label="Index") # 打开文件处理合并 wb = load_workbook("output.xlsx") ws = wb.active # 合并左上角的两个单元格:第一行空白格和第二行的Index单元格 ws.merge_cells("A1:A2") # 合并上层表头的worker/node对应三个单元格 ws.merge_cells("B1:D1") # 保存修改 wb.save("output.xlsx")
- 场景2:Jupyter Notebook中直接显示
可以用Pandas的Styler对象设置样式实现视觉上的合并效果:
df.style.set_table_styles([ # 处理worker/node上层表头的边框,实现合并视觉效果 {"selector": "th.col_heading.level0.col1", "props": [("border-right", "none")]}, {"selector": "th.col_heading.level0.col2", "props": [("border-left", "none"), ("border-right", "none")]}, {"selector": "th.col_heading.level0.col3", "props": [("border-left", "none")]}, # 处理Index单元格跨两行显示 {"selector": "th.index_name.level0", "props": [("rowspan", "2")]} ])
内容的提问来源于stack exchange,提问作者Double_Mind
相关产品推荐
相关产品推荐

