如何从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
相关产品推荐
相关产品推荐

