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

如何使用Pandas Melt转换Yfinance获取的多股票DataFrame格式

解决Yfinance多级列DataFrame转长表的问题

嘿,我来帮你搞定这个问题!你用yfinance拿到的是一个带**多级列(MultiIndex columns)**的DataFrame,想要转成每行对应单只股票月度数据的格式对吧?下面给你两种实用的方案,其中stack()方法会更简洁直观:

方案一:用stack()快速转换(推荐)

这个方法直接针对多级列的结构,把股票代码层级从列转到行里,一步到位:

# 将第一层级的股票代码(Ticker)从列索引转成行索引的一部分
stacked_data = data.stack(level=0)
# 重置索引,把Date和Ticker变成普通列,同时保留所有指标列
result = stacked_data.reset_index().rename(columns={'level_1': 'Ticker'})

执行完这两行,你就能得到完全符合需求的格式:每行对应一个日期+股票代码的组合,后面跟着Open/High/Low等所有指标。

方案二:用melt()配合透视转换

如果你更倾向于用melt(),可以先处理多级列的命名,再通过透视还原指标列:

# 先把多级列转成扁平的元组格式(比如('DYAN.JK', 'Open'))
data.columns = data.columns.to_flat_index()
# 用melt把所有指标列转成行,保留Date作为索引
melted = data.melt(id_vars=[], var_name=('Ticker', 'Metric'), value_name='Value')
# 透视表把Metric转回列,同时重置索引得到最终格式
result = melted.pivot_table(index=['Date', 'Ticker'], columns='Metric', values='Value').reset_index()
# 去掉列名的层级标签,让格式更干净
result.columns.name = None

两种方法都能达到你的目标,方案一的代码更短,也更贴合yfinance返回数据的结构,新手用起来更省心。你可以运行代码后用print(result.head())验证一下结果是否符合预期~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 10:42:38