我有一个数据框如下;
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'))]
答案 0 :(得分:1)
这有用吗?它不是特别优雅,但它应该做的工作。除了您的列表之外,我已经抓住了lion
和giraffe
,但它们似乎符合标准,除非我误解了。
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