在 pandas 中使用 loc 而不丢弃外层

Using loc in pandas without discarding the outer levels

我有一个像

这样的数据框
df = pd.DataFrame({
    'level0': [0,1,2],
    'level1': ['a', 'b', 'b'],
    'level2':['x', 'x', 'x'],
    'data': [0.12, 0.34, 0.45]}
).set_index(['level0', 'level1', 'level2'])
level0 level1 level 2 data
0 a x 0.12
1 b x 0.34
2 b x 0.56

如果level0level1level2是索引级别,我想访问(2, b)处的数据,但保留前两级标签。如果我做 df.loc[(2, 'b')] 输出是

level2 data
x 0.56

但我想要的输出是

level0 level1 level 2 data
2 b x 0.56

如何在使用 loc 时保持 0 级和 1 级?我可以在之后添加这些级别,但这有点烦人,而且我经常这样做,以至于想知道是否有一步解决方案。

您可以使用 MultiIndex.get_locs:

>>> df.loc[df.index.get_locs((2, 'b'))]

                      data
level0 level1 level2      
2      b      x       0.45