如何使用pandas melt将堆叠列Excel数据扁平化为变量?
处理多层堆叠列的Pandas数据转换
针对你遇到的三层堆叠表头Excel文件转换需求,这里提供两种简单直接的实现方法:
方法一:使用melt()处理多层列
melt()完全支持多层列索引,只需指定var_name为对应层级的名称列表即可:
import pandas as pd # 1. 读取Excel文件,指定前3行为多层表头 df = pd.read_excel('your_file.xls', header=[0, 1, 2]) # 重命名第一列(日期列)为Date df = df.rename(columns={df.columns[0]: 'Date'}) # 2. 执行melt转换,拆分多层列 df_flat = df.melt( id_vars='Date', # 保留作为标识的日期列 var_name=['Index', 'AssetClass', 'Type'], # 对应三层列的名称 value_name='Return' # 收益率列的名称 ) # 3. 修正AssetClass的名称(原数据是Equity,期望是Equities) df_flat['AssetClass'] = df_flat['AssetClass'].replace('Equity', 'Equities') # 查看结果 print(df_flat)
方法二:使用stack()转置列索引
通过stack()将多层列索引转为行,再重置索引整理结构:
import pandas as pd # 1. 读取并预处理数据 df = pd.read_excel('your_file.xls', header=[0, 1, 2]) df = df.rename(columns={df.columns[0]: 'Date'}) # 2. 将日期设为索引,堆叠所有列层级为行 df_flat = df.set_index('Date').stack([0, 1, 2]).reset_index() # 3. 重命名列并修正AssetClass df_flat.columns = ['Date', 'Index', 'AssetClass', 'Type', 'Return'] df_flat['AssetClass'] = df_flat['AssetClass'].replace('Equity', 'Equities') # 查看结果 print(df_flat)
两种方法最终都会输出你期望的扁平结构DataFrame,其中melt()更贴合你之前使用过的函数逻辑,更容易理解。
内容的提问来源于stack exchange,提问作者Python Pythiam
相关产品推荐
相关产品推荐

