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

如何在双索引Pandas时间序列DataFrame中使用.loc筛选数据?

双索引Pandas DataFrame使用.loc的正确方法

你的问题核心是没掌握MultiIndex(双索引)下.loc的正确索引逻辑,下面分两种场景给出正确写法:

场景1:筛选特定日期范围 + 单个指定ticker

如果你的DataFrame索引层级顺序是['date', 'ticker'](可通过df.index.names查看),正确写法如下:

# 方式1:直接用元组组合筛选条件
df.loc[("2000-01-03":"2000-01-06", "A"), :]

# 方式2:用pd.IndexSlice更清晰(复杂筛选时推荐)
import pandas as pd
df.loc[pd.IndexSlice["2000-01-03":"2000-01-06", "A"], :]

你之前的错误是把层级名称"date"写进了索引条件里,.loc的行索引部分直接用索引值即可,不需要层级名称;同时要把日期范围和ticker值放在同一个行索引的组合条件里。

场景2:筛选特定日期范围 + 所有ticker

要保留所有ticker,只需要在ticker的位置用:或者留空(注意元组的逗号):

# 方式1:元组中日期范围后加逗号,表示匹配该层级下所有值
df.loc[("2000-01-03":"2000-01-06",), :]

# 方式2:用pd.IndexSlice明确指定所有ticker
df.loc[pd.IndexSlice["2000-01-03":"2000-01-06", :], :]

额外注意:索引层级顺序

如果你的索引层级是['ticker', 'date'](先ticker后日期),写法需要调整:

# 筛选ticker"A"的指定日期范围
df.loc[("A", "2000-01-03":"2000-01-06"), :]

# 筛选所有ticker的指定日期范围
df.loc[(:, "2000-01-03":"2000-01-06"), :]
# 或者用IndexSlice
df.loc[pd.IndexSlice[:, "2000-01-03":"2000-01-06"], :]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:32:30