如何在二级MultiIndex的Pandas DataFrame中仅通过第二组索引访问数据?
解决Pandas MultiIndex中访问非首个层级索引的问题
针对你的MultiIndex场景,有两种简洁的方法可以直接访问指定movie的数据:
推荐方法:使用xs()函数
xs()是Pandas为MultiIndex量身打造的快捷提取工具,能直接定位到指定层级的索引值,无需关注其他层级:
# 通过层级名称指定 df.xs(302, level='movie') # 或者通过层级位置(movie是第二个索引,位置为1) df.xs(302, level=1)
执行后会返回所有user中movie为302的行,完全符合你的需求。
方法二:使用loc结合索引切片
如果想用loc实现,需要用元组来明确各层级的筛选规则——第一个层级用slice(None)表示匹配所有user,第二个层级指定目标movie值:
df.loc[(slice(None), 302), :]
如果需要频繁进行复杂的多层级筛选,可以导入IndexSlice简化写法:
import pandas as pd idx = pd.IndexSlice df.loc[idx[:, 302], :]
你之前尝试df.loc[:,302]报错,是因为Pandas会把这个语法解析为“选择所有行,列名为302”,而非索引层级筛选,所以才会出现KeyError。
不需要改用Numpy,Pandas对MultiIndex的查询支持已经足够完善,上述两种方法都能高效解决问题。
内容的提问来源于stack exchange,提问作者Sintrias
相关产品推荐
相关产品推荐

