如果任何列值不在Pandas的列表中,则删除组

我有一个数据框,例如:

Groups VAL1 VAL2
G1     DOG  3
G1     DOG  3
G1     DOG  3
G1     CAT  3
G2     CAT  3
G2     CAT  3
G2     CAT  3
G3     DOG  3
G3     BIRD 3
G4     CAT  3
G5     DOG  48
G5     DOG  48
G6     DOG  3
G6     DOG  3
G7     CAT  34
G7     CAT  34
G8     DOG  78
G8     CAT  2
G9     DOG  30
G9     DOG  30
G9     DOG  30
G9     CAT  30

并且我想删除列表Groups中没有任何VAL1内容的所有内容 ( the_list=['BIRD','CAT']) 以及VAL2 > 20

所以在这里我应该得到:

Groups VAL1 VAL2
G1     DOG  3
G1     DOG  3
G1     DOG  3
G1     CAT  3
G2     CAT  3
G2     CAT  3
G2     CAT  3
G3     DOG  3
G3     BIRD 3
G4     CAT  3
G6     DOG  3
G6     DOG  3
G7     CAT  34
G7     CAT  34
G8     DOG  78
G8     CAT  2
G9     DOG  30
G9     DOG  30
G9     DOG  30
G9     CAT  30

有人有使用熊猫的想法吗?

到目前为止,我尝试过:

 tab.groupby('Groups').filter(lambda x: x['VAL2']>20 & x['VAL1'].isnotin(['BIRD','CAT']))

回答

如果我理解正确,组过滤器应该检查“VAL1列表中的任何一个或所有的VAL2都小于 20”:

the_list = ['BIRD', 'CAT']

df.groupby('Groups').filter(
    lambda g: any(g.VAL1.isin(the_list)) | all(g.VAL2.lt(20)))
   Groups  VAL1  VAL2
0      G1   DOG     3
1      G1   DOG     3
2      G1   DOG     3
3      G1   CAT     3
4      G2   CAT     3
5      G2   CAT     3
6      G2   CAT     3
7      G3   DOG     3
8      G3  BIRD     3
9      G4   CAT     3
12     G6   DOG     3
13     G6   DOG     3
14     G7   CAT    34
15     G7   CAT    34
16     G8   DOG    78
17     G8   CAT     2
18     G9   DOG    30
19     G9   DOG    30
20     G9   DOG    30
21     G9   CAT    30
   Groups  VAL1  VAL2
0      G1   DOG     3
1      G1   DOG     3
2      G1   DOG     3
3      G1   CAT     3
4      G2   CAT     3
5      G2   CAT     3
6      G2   CAT     3
7      G3   DOG     3
8      G3  BIRD     3
9      G4   CAT     3
12     G6   DOG     3
13     G6   DOG     3
14     G7   CAT    34
15     G7   CAT    34
16     G8   DOG    78
17     G8   CAT     2
18     G9   DOG    30
19     G9   DOG    30
20     G9   DOG    30
21     G9   CAT    30

这些是当前答案的时间,有 220 万行。groupby 过滤器最易读,但在巨大的数据帧上稍微慢一些:


以上是如果任何列值不在Pandas的列表中,则删除组的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>