【发布时间】:2022-06-23 16:55:15
【问题描述】:
假设我有一个如下所示的 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 组及其值。
【问题讨论】:
标签: python pandas filter group-by any