Home > Software design >  What is the opposite of any() function in python, e.g. without any
What is the opposite of any() function in python, e.g. without any

Time:06-23

Let's assume I have a df that looks like this:

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

And I would like to delete a whole group if one of its values in the number column is negative. I can do:

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

However this gives me the wrong output since this returns all groups with any rows that have a negative number in the number column. See below:

    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

How do I change this function to make it return all groups without any negative numbers in the number column. The output should be group A with its values.

CodePudding user response:

Use the boolean NOT operator ~:

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

Or check if all values don't match using De Morgan's Law:

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

CodePudding user response:

You can use the all function which returns the opposite result you expect. i.e. It will do the opposite. It will return TRUE only if all are true else it will return FALSE.

Just Try :

not all(list)
  • Related