Pandas多层索引筛选:结合二级索引切片与列值条件
Pandas MultiIndex 多条件筛选解决方案
这里提供几种简洁的方法来同时满足你的两个筛选条件:
方法1:使用loc + IndexSlice(推荐,索引操作更高效)
当你的MultiIndex包含Lane_ID和Frame_ID两个层级时,用pd.IndexSlice可以灵活跨层级指定条件:
import pandas as pd # 定义目标Lane_ID值 target_lane = 3 # 初始化索引切片器 idx = pd.IndexSlice # 筛选Frame_ID在200-300之间,且Lane_ID等于target_lane的行(假设Lane_ID是一级索引) filtered_df = df.loc[idx[target_lane, 200:300], :] # 如果层级顺序是Frame_ID在前、Lane_ID在后,调整为: # filtered_df = df.loc[idx[200:300, target_lane], :]
方法2:使用query方法(语法更直观)
query支持直接用索引层级名称写条件,代码可读性更高:
target_lane = 3 filtered_df = df.query('Lane_ID == @target_lane and Frame_ID between 200 and 300')
注意这里用@符号引用外部变量target_lane。
方法3:布尔索引组合
把两个条件的布尔序列按位与,直接筛选:
target_lane = 3 mask = (df.index.get_level_values('Frame_ID').between(200, 300)) & \ (df.index.get_level_values('Lane_ID') == target_lane) filtered_df = df[mask]
这种方式适合需要扩展更复杂条件的场景。
内容的提问来源于stack exchange,提问作者evan
相关产品推荐
相关产品推荐

