对于我给定的多索引 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
我该怎么做?
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