在特定级别有条件地切片 pandas 多重索引

问题描述 投票:0回答:1

对于我给定的多索引 DataFrame:

df = pd.DataFrame(
    np.random.randn(12),
    index=[
        [1,1,2,3,4,4,5,5,6,6,7,8],
        [1,2,1,1,1,2,1,2,1,2,2,2],
    ]
)
            0
1 1  1.667692
  2  0.274428
2 1  0.216911
3 1 -0.513463
4 1 -0.642277
  2 -2.563876
5 1  2.301943
  2  1.455494
6 1 -1.539390
  2 -1.344079
7 2  0.300735
8 2  0.089269

我想对其进行切片,以便只保留第二个索引级别同时包含 1 和 2 的行

            0
1 1  1.667692
  2  0.274428
4 1 -0.642277
  2 -2.563876
5 1  2.301943
  2  1.455494
6 1 -1.539390
  2 -1.344079

我该怎么做?

python pandas multi-index
1个回答
0
投票

您可以将多重索引

to_frame
转换为能够使用
groupby.transform
执行
set.issubset

out = df[df.index.to_frame().groupby(0)[1].transform({1, 2}.issubset)]

注意。如果您想要完全(至少不是)

{1, 2}
,请使用
{1, 2}.__eq__

输出:

            0
1 1 -1.017357
  2  0.869500
4 1 -1.348415
  2  0.625116
5 1  0.708617
  2  0.438953
6 1  0.632509
  2  0.693872
© www.soinside.com 2019 - 2024. All rights reserved.