我有一个数据帧,例如:
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
我想删除列表(the_list=['BIRD','CAT']
)中没有任何VAL1
的所有Groups
和其中的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”:这些是220万行当前答案的计时。groupby筛选器可读性最好,但在大型数据帧上稍慢一些:
VAL1
在include
或VAL2
小于20.any()
和.all()
向整个小组广播您的病情|
(or)操作符将这两个操作符组合在一起.isin()
从前面步骤中选择的组筛选数据帧如果性能很重要,不要使用
filter
更快的解决方案是将^{} 与} 中过滤:
any
和all
一起使用,并在^{相关问题 更多 >
编程相关推荐