如何在双索引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
相关产品推荐
相关产品推荐

