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

