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

如何基于二级索引列表筛选Pandas三级MultiIndex数据?

问题场景

给定如下Pandas代码:

import pandas as pd
import numpy as np
np.random.seed(0)
idx = pd.MultiIndex.from_product([[1,2,3], ['a', 'b', 'c'], [6, 7]])
df = pd.DataFrame(np.random.randn(18), index=idx)
selection = [(1, 'a'), (2, 'b')]

需要筛选出索引前缀匹配selection中任意元素的行,目标索引为:

(1, 'a', 6), (1, 'a', 7), (2, 'b', 6), (2, 'b', 7)
更简洁的Pandas风格实现

推荐两种更贴合Pandas向量化操作习惯的写法:

方法一:get_level_values + isin组合

df.loc[df.index.get_level_values([0, 1]).isin(selection)]

方法二:Pandas 1.5.0+ 专属简化写法

如果你的Pandas版本不低于1.5.0,可直接在isin中指定匹配的索引层级,代码更直观:

df.loc[df.index.isin(selection, level=[0, 1])]
优势说明
  • 原方法的列表推导式属于逐元素遍历的循环操作,数据量较大时,效率远低于Pandas的向量化API
  • 上述两种写法均采用Pandas内置的向量化操作,代码更简洁易读,完全贴合Pandas的惯用风格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 08:45:59