我有一个多索引熊猫数据帧df
,如下所示:
Count
Letter Direction
A -1 3
1 0
B -1 2
1 4
C -1 4
1 10
D -1 8
1 1
E -1 4
1 5
F -1 1
1 1
我想过滤出在两个方向或任一方向上都有Letters
的{{1}}。
尝试了Count < 2
,但给出了以下输出:
df[df.Count < 2]
所需的输出如下,
Count
Letter Direction
A 1 0
D 1 1
F -1 1
1 1
我应该怎么做才能达到以上要求?
答案 0 :(得分:1)
将GroupBy.transform
与布尔掩码和GroupBy.any
-any
配合使用,检查是否True
和MultiIndex
的第一级至少返回一个transform
mask
具有与原始DataFrame相同的大小,因此可以通过boolean indexing
进行过滤:
df = df[(df.Count < 2).groupby(level=0).transform('any')]
print (df)
Count
Letter Direction
A -1 3
1 0
D -1 8
1 1
F -1 1
1 1
另一种解决方案是使用MultiIndex.get_level_values
根据条件获取Letter
的值,并通过DataFrame.loc
选择:
df = df.loc[df.index.get_level_values(0)[df.Count < 2]]
print (df)
Count
Letter Direction
A -1 3
1 0
D -1 8
1 1
F -1 1
1 1