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

如何将多索引Pandas DataFrame的列转换为行层级结构?

Pandas DataFrame 动态列格式转换方案
  • 核心思路:用Pandas的stack()方法将列索引转为最内层行索引,自动适配任意列数,无需针对列数做特殊处理。

步骤1:构造原DataFrame(模拟输入)

import pandas as pd

# 构建多层行索引
row_index = pd.MultiIndex.from_tuples(
    [('db_c', 'c_dat'), ('db_c', 'c_idx'), ('db_s', 's_dat'), ('db_s', 's_idx')]
)
# 构造数据(支持任意数量的列,此处以dw1、dw2为例)
raw_df = pd.DataFrame(
    data={'dw1': ['a', 'b', 'c', 'd'], 'dw2': ['e', 'f', 'g', 'h']},
    index=row_index
)

步骤2:执行格式转换

# stack将列转为内层行索引,重置索引后设置列名
converted_df = raw_df.stack().reset_index()
converted_df.columns = ['一级行索引', '二级行索引', '列名', '值']

# 若需保持多层行索引的显示格式,重新设置索引即可
converted_df = converted_df.set_index(['一级行索引', '二级行索引'])

转换后的结果

列名  值
一级行索引 二级行索引       
db_c    c_dat   dw1  a
        c_dat   dw2  e
        c_idx   dw1  b
        c_idx   dw2  f
db_s    s_dat   dw1  c
        s_dat   dw2  g
        s_idx   dw1  d
        s_idx   dw2  h

关键说明

  • stack()方法会自动遍历所有列,将列名转为最内层行索引,无论原DataFrame有多少列都能适配。
  • 若不需要自定义列名,直接使用raw_df.stack()即可,默认索引和列名也符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:10:06