如何从多索引熊猫数据框中筛选值

时间:2019-04-12 07:06:41

标签: python-3.x pandas

我有一个多索引熊猫数据帧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

我应该怎么做才能达到以上要求?

1 个答案:

答案 0 :(得分:1)

GroupBy.transform与布尔掩码和GroupBy.any-any配合使用,检查是否TrueMultiIndex的第一级至少返回一个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