首页 > 解决方案 > 如何从多索引 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哪个方向都有Count < 2两个或一个方向。
试过了df[df.Count < 2],但它给出了以下输出:

                Count
Letter Direction           
A        1          0
D        1          1
F       -1          1
         1          1

所需的输出如下,

                Count
Letter Direction           
A       -1          3
         1          0
D       -1          8
         1          1
F       -1          1
         1          1

我应该怎么做才能得到上述?

标签: python-3.xpandas

解决方案


GroupBy.transform与布尔掩码一起使用GroupBy.any-检查每个第一级any是否至少有一个,并返回与原始 DataFrame 相同的大小,因此可以通过以下方式过滤:TrueMultiIndextransformmaskboolean 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

推荐阅读