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

如何将多层列索引的多个Pandas DataFrame导出为长格式单页Excel

实现方案

核心思路是把每个DataFrame独有的主题标识从列索引转移为行索引层级,再纵向拼接所有数据,避免列过宽。

操作步骤

  • 遍历每个DataFrame,提取独有的第一级列索引(主题名)
  • 移除每个DataFrame列的第一级索引,保留所有df统一的后两级列索引
  • 将主题名作为新的行索引层级添加到对应DataFrame
  • 纵向拼接所有处理后的DataFrame,导出Excel

完整可运行代码

import pandas as pd
df1 = pd.DataFrame({'A': [11, 21, 31],
               'B': [12, 22, 32],
               'C': [13, 23, 33]},
              index=['ONE', 'TWO', 'THREE'])

df2 = pd.DataFrame({'A': [111, 211, 311],
               'B': [121, 221, 321],
               'C': [131, 231, 331]},
              index=['ONE', 'TWO', 'THREE'])

df1.columns = pd.MultiIndex.from_product([['theme1'],['level2'],df1.columns ])
df2.columns = pd.MultiIndex.from_product([['theme2'],['level2'],df2.columns ])

list_df=[df1,df2]

# 新增处理逻辑
processed_list = []
for df in list_df:
    # 提取当前df的主题名
    theme_name = df.columns.get_level_values(0).unique()[0]
    # 移除列的第一级索引(主题层)
    df.columns = df.columns.droplevel(0)
    # 将主题名添加为行索引的最外层
    df = pd.concat([df], keys=[theme_name], names=['主题'])
    processed_list.append(df)

# 纵向拼接
df_all = pd.concat(processed_list, axis=0)
# 导出Excel
df_all.to_excel('df_all_long.xlsx')

输出效果

导出的Excel行索引从外到内依次为主题、原行索引(ONE/TWO/THREE),列统一为level2下的A/B/C,所有主题数据纵向排列,直接纵向滚动即可浏览全部内容,不会出现横向列过宽的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 21:15:02