python中any()函数的反义词是什么?



让我们假设我有一个df,看起来像这样:

import pandas as pd
d = {'group': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C'], 
'number': [0, 3, 2, 1, 2, 1, -2, 1, 2, 3, 4, 2, 1, -1, 0]}
df = pd.DataFrame(data=d)
df
group   number
0   A       0
1   A       3
2   A       2
3   A       1
4   A       2
5   B       1
6   B      -2
7   B       1
8   B       2
9   B       3
10  C       4
11  C       2
12  C       1
13  C      -1
14  C       0

如果number列中有一个值是负的,我想删除整个组。我可以:

df.groupby('group').filter(lambda g: (g.number < 0).any())
然而,这给了我错误的输出,因为这返回所有组与任何number列中有负数的行。见下文:
group   number
5   B       1
6   B      -2
7   B       1
8   B       2
9   B       3
10  C       4
11  C       2
12  C       1
13  C      -1
14  C       0

我如何改变这个函数,使它返回所有组而不返回任何number列为负数。输出应为A组及其值。

使用布尔NOT运算符~:

df.groupby('group').filter(lambda g: ~(g.number < 0).any())

或者使用De Morgan's Law检查all值是否匹配:

df.groupby('group').filter(lambda g: (g.number >= 0).all())

您可以使用all函数返回与您期望的相反的结果。也就是说,它会起相反的作用。只有当全部为真时,它才会返回TRUE,否则它将返回FALSE。

Just Try:

not all(list)

最新更新