You need to enable JavaScript to run this app. 如何基于MultiIndex DataFrame生成保留合并单元格标签的Plotly表格
优惠活动
大模型
产品
解决方案
定价
更多

如何基于MultiIndex DataFrame生成保留合并单元格标签的Plotly表格

从MultiIndex DataFrame创建带合并单元格的Plotly Table实现方法

要保留MultiIndex的合并单元格标签效果,核心是按层级构造表头结构,同时开启Plotly Table的自动合并重复表头配置,具体操作如下:

实现步骤

  • 拆解多级列索引为分层列表:将一级表头、二级表头分别整理为列表,同属一个一级分类的二级表头对应位置,重复填入相同的一级表头值
  • 开启merge_duplicate_headers=True参数:Plotly Table会自动将同层级重复的表头合并为跨列单元格,实现MultiIndex的层级展示效果
  • 对齐单元格数值结构:将DataFrame的行索引作为第一列数据传入,后续列按顺序对应多级表头的每一列,保证数值位置匹配

完整示例代码

import plotly.graph_objects as go
import pandas as pd

# 示例:构造带两级列索引的MultiIndex DataFrame
cols = pd.MultiIndex.from_tuples(
    [('分类A', '数值1'), ('分类A', '数值2'), ('分类B', '数值1'), ('分类B', '数值2')],
    names=['一级分类', '二级指标']
)
df = pd.DataFrame(
    [[10, 20, 30, 40], [15, 25, 35, 45], [12, 22, 32, 42]],
    index=['项目1', '项目2', '项目3'],
    columns=cols
)

# 处理分层表头
level1_headers = [''] + [col[0] for col in df.columns]
level2_headers = ['指标名称'] + [col[1] for col in df.columns]
headers = [level1_headers, level2_headers]

# 组装单元格数据:第一列是行索引,后续为各列数值
cell_values = [
    df.index.tolist(),
    *[df[col].tolist() for col in df.columns]
]

# 创建Table组件
table = go.Table(
    header=dict(
        values=headers,
        align='center',
        merge_duplicate_headers=True  # 核心参数:自动合并同层级重复表头
    ),
    cells=dict(
        values=cell_values,
        align='center'
    )
)

# 渲染图表
fig = go.Figure(data=table)
fig.update_layout(width=700, height=400)
fig.show()

原有代码问题说明

你原有代码没有将MultiIndex拆分为层级化的表头列表,也没有开启合并重复表头参数,同时直接使用df.T.values传入数值没有对齐表头结构,导致数值展示位置错位,和预期效果不符。

预期效果参考

目标效果示意图

原错误效果参考

实际运行结果示意图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 08:45:02