如何用Python Pandas将多层索引列DataFrame转换为长表?
解决方案
步骤1:读取带多层表头的Excel文件
原始表格存在双层表头(季度+指标),读取时需指定header=[0,1]识别多层列索引:
import pandas as pd # 替换为你的Excel文件路径 df = pd.read_excel('your_file.xlsx', header=[0, 1]) # 将第一列(地区列)重命名并设为索引 df.rename(columns={df.columns[0]: '地区'}, inplace=True) df.set_index('地区', inplace=True)
步骤2:堆叠多层列索引转换为长格式
用stack()处理多层列,将季度维度从列转为行,这比wide_to_long更适配多层索引场景:
# 堆叠第一层列索引(季度),将其转为行维度 df_stacked = df.stack(level=0).reset_index() # 重命名列匹配目标格式 df_stacked.rename(columns={'level_1': '季度'}, inplace=True) # 调整列顺序至目标格式 final_df = df_stacked[['地区', '季度', '销售额', '利润']]
为什么wide_to_long失效?
wide_to_long要求列名遵循统一的前缀+后缀格式(如Q1_销售额),但你的原始表格是多层列索引结构,并非扁平化命名格式,无法匹配该函数的要求;而stack()可直接处理多层索引的宽表转长表需求。
内容的提问来源于stack exchange,提问作者Armin
相关产品推荐
相关产品推荐

