熊猫:应用多个过滤器

时间:2014-02-11 10:05:10

标签: python pandas

我有一个数据框如下;

      WORD1    CAT1          WORD2    CAT2     Val 1  Val 2  Val 3
    elephant   animal          daisy   flower    191    138    129
        lion   animal      blackbird   flower    171    169    213
       tiger   animal          chimp   animal    229    179    482
      hoopoe    bird         cheetah   animal    169    104    202
    hornbill    bird          cuckoo     bird    483    469     78
   sunflower   flower          robin     bird    470    442    160
        rose   flower        leopard   animal    219    244    432
     giraffe   animal         violet   flower    445    497    420
       zebra   animal           deer   animal    280     74    383
     sparrow    bird   chrysanthemum   flower    280    242    434
        duck   animal           hawk     bird    321     90     87

我想根据“CAT1”和“CAT1”中的以下模式应用过滤器'CAT2';

['animal',['flower','bird']] - 将被视为;

 CAT1     CAT2
 animal & flower
 animal & bird
 flower & animal
 bird   & animal

过滤器的使用方式应该是'花&鸟'或'鸟&花被排除在外。

上述关系的过滤结果应为;

WORD1       CAT1      WORD2     CAT2     Val 1   Val 2   Val 3
elephant    animal    daisy     flower    191     138      129
duck        animal    hawk      bird      321      90       87
rose        flower    leopard   animal    219     244      432
hoopoe      bird      cheetah   animal    169     104      202
lion        animal    blackbird flower    171     169      213
giraffe     animal    violet    flower    445     497      420

如何构建一个执行此操作的过滤器?

我尝试了以下内容但没有取得任何成功。

>>> data = data[((data['CAT1'] != 'flower') & (data['CAT2'] != 'bird')) & ((data
['CAT1'] != 'bird') & (data['CAT2'] != 'flower'))]

1 个答案:

答案 0 :(得分:1)

这有用吗?它不是特别优雅,但它应该做的工作。除了您的列表之外,我已经抓住了liongiraffe,但它们似乎符合标准,除非我误解了。

myset = ['flower', 'bird']
df[((df.CAT1 == 'animal') & (df.CAT2.isin(myset))) | ((df.CAT2 == 'animal') & (df.CAT1.isin(myset)))]

给出

     WORD1    CAT1    WORD2     CAT2    Val1    Val2    Val3
0    elephant animal  daisy     flower   191     138     129
1    lion     animal  blackbird flower   171     169     213
3    hoopoe   bird    cheetah   animal   169     104     202
6    rose     flower  leopard   animal   219     244     432
7    giraffe  animal  violet    flower   445     497     420
10   duck     animal  hawk      bird     321     90  87