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

如何在Multi-index DataFrame中通过三组条件筛选数据?

多级索引DataFrame的多条件筛选实现方法

针对你提到的三级索引(Date/Letter/Number)DataFrame,以下几种方法可以实现多条件组合筛选:

方法1:loc结合索引层级判断

通过get_level_values分别获取每一级索引,结合区间判断和列表匹配条件,最终用逻辑与组合筛选:

# 定义筛选条件
date_start = "2015-01-01"
date_end = "2020-01-01"
target_letters = ["A", "B", "D", "G", "X"]
target_numbers = [1, 3, 5, 7, 9]

# 组合条件筛选
filtered_df = df.loc[
    (df.index.get_level_values("Date").between(date_start, date_end)) &
    (df.index.get_level_values("Letter").isin(target_letters)) &
    (df.index.get_level_values("Number").isin(target_numbers))
]

这种方法无需修改原始索引结构,直接基于索引层级做条件判断,兼容性强。

方法2:query语法实现简洁筛选

如果DataFrame的多级索引已正确命名,query方法可以用接近自然语言的语法完成筛选,可读性更高:

filtered_df = df.query(
    'Date >= "2015-01-01" and Date <= "2020-01-01" '
    'and Letter in ["A", "B", "D", "G", "X"] '
    'and Number in [1, 3, 5, 7, 9]'
)

注意:若Date索引是datetime类型,直接用日期字符串对比即可,pandas会自动解析匹配。

方法3:分步分层筛选

先对第一级索引(Date)做区间切片,再在结果中筛选后续层级的条件,适合需要保留中间结果的场景:

# 第一步:筛选日期区间
date_filtered = df.loc["2015-01-01":"2020-01-01"]
# 第二步:筛选字母和数字列表
filtered_df = date_filtered[
    date_filtered.index.get_level_values("Letter").isin(target_letters) &
    date_filtered.index.get_level_values("Number").isin(target_numbers)
]

补充说明

  • 确保Date索引的类型为datetime64,日期区间切片和对比会更精准;若为字符串类型,需保证格式与筛选条件完全一致。
  • xs方法更适合提取单个索引值,多列表/区间的组合筛选用上述方法更高效直接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:33:34