多只股票数据按各自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
相关产品推荐
相关产品推荐

