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

如何从Pandas多级索引股票DataFrame中提取指定标的全部收盘价时间序列

Pandas 多级索引多时段收盘价查询方案

默认你的DataFrame行索引结构为第一层:年份(格式与你示例中的"2021"一致)、第二层:标的代码,列包含close收盘价字段,以下是不同查询需求的实现方法:

1. 单个标的全时间段收盘价查询

对第一层索引用通配切片匹配所有值,第二层指定标的代码即可:

  • 简洁写法(推荐,需要pandas 0.14及以上版本):
import pandas as pd
idx = pd.IndexSlice
# 提取xli所有年份的收盘价
df.loc[idx[:, "xli"], "close"]
  • 基础兼容写法:
df.loc[(slice(None), "xli"), "close"]

2. 单个标的指定多个年份收盘价查询

第一层索引传入需要查询的年份列表即可,注意年份格式要和索引中存储的格式完全匹配(如果索引存的是整数年份就去掉引号):

idx = pd.IndexSlice
# 提取xli 2021、2022、2023三个年度的收盘价
df.loc[idx[["2021", "2022", "2023"], "xli"], "close"]

3. 多个标的对应多个年份收盘价查询

两层索引分别传入要匹配的目标列表即可:

idx = pd.IndexSlice
# 提取xli、spy两个标的2021、2022年的收盘价
df.loc[idx[["2021", "2022"], ["xli", "spy"]], "close"]

补充说明:如果你的索引第一层是完整的datetime格式日期而非单独的年份,可通过布尔索引筛选:

# 筛选xli 2021-2022年的收盘价
mask = (df.index.get_level_values(0).year.isin([2021,2022])) & (df.index.get_level_values(1) == "xli")
df.loc[mask, "close"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:15:04