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

如何一次性获取Pandas多级索引DataFrame的多个切片?

Pandas多级索引(Multi-Index)多层级切片方法

你遇到的问题是把行索引的层级参数错误放到了列参数位置,df.loc[]的第一个位置对应行索引,第二个位置对应列,所以之前的写法会把-1当成列名查找,自然抛出KeyError。

下面是几种正确的多层级切片实现方式:

方法1:用元组列表指定行索引组合

如果要同时指定第一层级取[0,1,2]、第二层级固定为-1,可以用元组列表描述行索引的组合关系:

# 筛选A=0/1/2 且 B=-1的所有行
df.loc[ [(0,-1), (1,-1), (2,-1)] ]

输出结果:

D   E
A B  C         
0 -1 20  30  40
1 -1 21  31  41
2 -1 22  32  42

方法2:使用pd.IndexSlice(更灵活)

如果需要处理复杂切片场景(比如某一层级取范围、另一层级取固定值),pd.IndexSlice是更便捷的选择:

import pandas as pd

# 定义切片器
idx = pd.IndexSlice
# 第一层级取0/1/2,第二层级取-1,第三层级任意
df.loc[idx[[0,1,2], -1, :]]

这种方式支持更灵活的组合,比如要精准定位A=0/1/2、B=-1、C=20/22的行,可写成:

df.loc[idx[[0,1,2], -1, [20,22]]]

方法3:使用xs方法(单一层级快速筛选)

如果只是固定某一层级的值,同时筛选另一层级,xs方法也适用:

# 先筛选B=-1的所有行,再取A=0/1/2的部分
df.xs(-1, level='B').loc[[0,1,2]]

也可以反向操作:

df.xs([0,1,2], level='A', drop_level=False).xs(-1, level='B')

报错原因说明

你之前写的df.loc[[0,1,2], -1]中,loc的第二个参数-1会被识别为列名,但你的数据列只有D和E,因此抛出KeyError;df.loc[[0,1,2], [-1]]同理,把[-1]当成列名列表查找,自然找不到匹配项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:45:12