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

调整Pandas DataFrame多索引列层级以适配Excel导出

解决MultiIndex列层级调整问题

要将透视后DataFrame中前两列(CUSTOMER_ID、NAME)的索引层级从第一层级调整到第二层级,你需要直接操作列的MultiIndex——reset_index仅处理行索引,对你的场景无效。以下是具体实现步骤:

示例场景假设

假设当前透视后的列MultiIndex结构如下(第一层级是CUSTOMER_ID/NAME/月份,第二层级是对应值类型):

MultiIndex([('CUSTOMER_ID', 'ID'),
            ('NAME', '客户名称'),
            ('2023-01', '销售额'),
            ('2023-02', '销售额')],
           names=['层级1', '层级2'])

预期调整后的结构(CUSTOMER_ID/NAME移到第二层级,第一层级统一对齐):

MultiIndex([('ID', 'CUSTOMER_ID'),
            ('客户名称', 'NAME'),
            ('销售额', '2023-01'),
            ('销售额', '2023-02')],
           names=['层级1', '层级2'])

代码实现

方法1:针对前两列交换层级

通过遍历列元组,单独调整前两个列的层级顺序,其余列保持原样:

import pandas as pd

# 假设df是你的透视后DataFrame
new_col_tuples = []
for idx, col_tuple in enumerate(df.columns):
    if idx < 2:
        # 交换层级:(原第一层级, 原第二层级) → (原第二层级, 原第一层级)
        adjusted_tuple = (col_tuple[1], col_tuple[0])
    else:
        adjusted_tuple = col_tuple
    new_col_tuples.append(adjusted_tuple)

# 重新设置列的MultiIndex
df.columns = pd.MultiIndex.from_tuples(new_col_tuples)

方法2:使用swaplevel批量处理前两列

如果前两列的层级结构一致,也可以先拆分列、交换层级再合并:

# 拆分前两列和剩余列
first_two_cols = df.columns[:2]
rest_cols = df.columns[2:]

# 交换前两列的层级
adjusted_first_two = first_two_cols.swaplevel()

# 合并调整后的列并重新设置
df.columns = adjusted_first_two.append(rest_cols)

验证调整结果

调整后可以通过df.columns查看列的MultiIndex结构,确认CUSTOMER_ID和NAME已移到第二层级,此时即可正常导出Excel。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:05:25