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

如何用tabulate打印MultiIndex DataFrame并将分层索引展示为独立列

解决方案

你可以通过先展开多级索引、替换重复的一级索引值,再传入tabulate打印的方式实现和pandas原生一致的效果,完整实现代码如下:

import numpy as np
import tabulate
import pandas as pd

# 生成测试用多级索引DataFrame
df = pd.DataFrame(np.random.randn(4, 3),
                  index=pd.MultiIndex.from_product([["foo", "bar"],
                                                    ["one", "two"]]),
                  columns=list("ABC"))

# 步骤1:重置索引,将两级索引转为普通数据列
df_print = df.reset_index()
# 步骤2:将第一级索引的重复出现值替换为空字符串,模拟pandas的折叠效果
df_print.loc[df_print['level_0'].duplicated(), 'level_0'] = ''
# 步骤3:调整tabulate参数打印,前两列索引列设置空表头,关闭默认行索引展示
print(tabulate.tabulate(
    df_print, 
    tablefmt="github", 
    headers=['', ''] + df.columns.tolist(), 
    showindex=False
))

关键调整说明

  • 不要直接传入带MultiIndex的DataFrame到tabulate,默认会将多级索引合并为元组展示
  • 利用duplicated()方法过滤第一级索引的重复值,仅保留首次出现的索引值,剩余设为空,实现折叠效果
  • 打印时设置showindex=False关闭tabulate默认的自增行序号,手动指定前两列表头为空,匹配pandas原生展示样式

如果你的MultiIndex本身设置了自定义名称,可直接使用headers="keys"参数,不需要手动指定表头列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:45:03