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

多只股票数据按各自Close列排序报错问题及需求

解决多只股票数据按各自Close价格排序并输出的问题

当通过yfinance获取多只股票(GOOGL、MSFT、AAPL)数据时,返回的DataFrame采用多层列索引(MultiIndex),每只股票的行情字段(比如Close)会和股票代码绑定为元组形式的列标签(例如('GOOGL', 'Close'))。直接使用sort_values(by=['Close'])会因列名重复触发报错,以下是具体解决方案:

1. 获取多只股票数据

先执行基础的数据获取代码:

import yfinance as yf

# 指定目标股票代码,设置时间范围
tickers = ['GOOGL', 'MSFT', 'AAPL']
data = yf.download(tickers, start='2023-01-01', end='2024-01-01')

2. 提取所有Close列并统一排序

通过xs方法提取所有股票的Close列,得到一个普通结构的DataFrame,再对每一列单独按价格升序排序:

# 从多层索引中提取所有Close列
close_data = data.xs('Close', axis=1, level=1)

# 对每只股票的Close价格单独升序排序
sorted_close = close_data.apply(lambda col: col.sort_values(), axis=0)

# 输出排序后的三列Close数据
print(sorted_close)

3. 单独处理单只股票并输出

如果需要分别输出每只股票的排序结果,可通过循环遍历股票代码,针对对应元组列标签处理:

for ticker in tickers:
    # 定位单只股票的Close列,按价格升序排序
    sorted_single_stock = data[(ticker, 'Close')].sort_values()
    print(f"\n{ticker} 按Close价格升序排序结果:")
    print(sorted_single_stock)

两种方式都能避免列名重复的报错,且满足分别按各自Close价格排序、仅输出Close列的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:05:00