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

如何按多级索引的单个层级筛选Pandas DataFrame?

筛选多级索引Pandas DataFrame的指定层级

没问题!当你把time设为索引层级后,确实没法直接像普通列那样用df["time"]访问,但有好几种优雅的方法可以完成筛选,完全不用把索引变回列(避免数据冗余):

方法1:使用index.get_level_values()

这是最直接的方式,专门用来获取指定索引层级的所有值:

# 按索引层级名称筛选
filtered_df = df[df.index.get_level_values("time") > 1]

# 也可以用层级位置(这里time是第二个索引,位置为1)
filtered_df = df[df.index.get_level_values(1) > 1]

运行后就能得到time大于1的所有行,完全保留原有的多级索引结构。

方法2:使用query()方法(更简洁)

Pandas的query方法支持直接引用索引层级的名称,语法非常直观:

filtered_df = df.query("time > 1")

这种写法和你原本想写的df[df["time"] > 1]几乎一样,只是不需要把time作为列存在,非常方便。

方法3:使用loc结合索引切片(适合范围筛选)

如果你的索引是有序的,可以用loc做切片筛选,不过需要先确保time索引是有序的:

# 先按time层级排序
df_sorted = df.sort_index(level="time")
# slice(None)表示匹配id层级的所有值,1:表示time大于1的部分
filtered_df = df_sorted.loc[(slice(None), 1):]

这种方法更适合连续的范围筛选场景,比如time在某个区间内的行。

验证结果

不管用哪种方法,最终得到的筛选结果都是:

val
id time     
1  2       3
2  2       4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:52:20