2014-02-11 73 views
1

我有一個數據框如下;熊貓:應用多個過濾器

 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」 &「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

這工作?這不是特別優雅,但它應該完成這項工作。除了您的列表,我還抓到了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 
+0

是的,我已經包括在編輯 '獅子' 和 '長頸鹿'。涼!適用於我。 – richie