Pandas MultiIndex有没有比query更便捷的按层级名称选行方法
Pandas多级命名索引按层级名筛选的最优方案
针对你描述的场景,xs()方法是最适配的解决方案,无需记忆层级序号、无需重置索引、语法极简,完全匹配你的需求。
基础使用(单值筛选)
要筛选snarf层级为D1的所有行,直接执行以下代码即可:
df.xs('D1', level='snarf', drop_level=False)
参数说明:
- 第一个位置参数传入你要匹配的索引标签值,这里为
D1 level参数直接传入索引层级的名称,不需要关注它是第几级索引drop_level=False为可选配置,加了之后筛选结果会保留原有的全部4级索引结构,不加的话返回结果会自动移除snarf这一层索引
进阶使用
多层级同时筛选
如果需要同时筛选多个层级的标签,比如同时匹配quack为Q1、snarf为D1的行,写法如下:
df.xs(('Q1', 'D1'), level=['quack', 'snarf'], drop_level=False)
单层级多值筛选
如果要筛选snarf层级为D1、D2、D3的所有行,可以搭配get_level_values方法实现:
df[df.index.get_level_values('snarf').isin(['D1', 'D2', 'D3'])]
方案优势
- 全程不需要修改原表结构,不会产生额外内存开销,适合大数据量表使用
- 语法简单易记,不需要掌握query的特殊语法规则,出错概率低
- 直接基于索引做匹配,性能比query方法更快
内容的提问来源于stack exchange,提问作者user3673
相关产品推荐
相关产品推荐

