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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:12:49