如何将多索引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
相关产品推荐
相关产品推荐

