如何按多索引筛选Pandas DataFrame:匹配Site In或Site Out为'Mid'
筛选Pandas多级索引DataFrame的解决方案
针对你这个带多级索引的m.transmission DataFrame,要筛选出**Site In等于'Mid' 或 Site Out等于'Mid'**的行,确实不能直接用loc[['Mid']](它只会匹配第一级索引),这里给你两种简单实用的实现方法:
方法一:布尔索引结合get_level_values
这是最直观的方式,先提取对应层级的索引值,再组合条件筛选:
# 分别提取多级索引中"Site In"和"Site Out"层级的所有值 site_in_vals = m.transmission.index.get_level_values('Site In') site_out_vals = m.transmission.index.get_level_values('Site Out') # 用逻辑或(|)组合条件,筛选符合要求的行,保留所有列 filtered_df = m.transmission[(site_in_vals == 'Mid') | (site_out_vals == 'Mid')]
这个方法逻辑清晰,不管你的多级索引层级顺序如何,只要指定层级名称就能准确提取,不会出错。
方法二:用query方法简化写法
如果你喜欢更简洁的代码,可以用Pandas的query方法,直接通过索引层级名称写条件:
# 注意索引名称带空格,需要用反引号(`)包裹层级名 filtered_df = m.transmission.query("`Site In` == 'Mid' or `Site Out` == 'Mid'")
这种写法更接近自然语言,可读性很强,适合快速编写筛选逻辑。
两种方法最终都会得到你需要的4条记录:Site In=Mid、Site Out=North;Site In=Mid、Site Out=South;Site In=North、Site Out=Mid;Site In=South、Site Out=Mid,并且所有列都会完整保留。
内容的提问来源于stack exchange,提问作者oakca
相关产品推荐
相关产品推荐

