我有一个pandas数据帧,看起来像这样:
import pandas as pd
d = {'group': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C'],
'fruit': ['strawberry', 'strawberry', 'strawberry', 'strawberry', 'strawberry', 'kiwi', 'banana', 'strawberry', 'orange', 'kiwi', 'banana', 'melon', 'orange', 'kiwi', 'melon']}
df = pd.DataFrame(data=d)
df
group fruit
A strawberry
A strawberry
A strawberry
A strawberry
A strawberry
B kiwi
B banana
B strawberry
B orange
B kiwi
C banana
C melon
C orange
C kiwi
C melon
使用下面的代码,我可以删除一个group
,如果该组包含任何fruit
值为"草莓"的行。
df[~df.fruit.eq('strawberry').groupby(df.group).transform('any')]
group fruit
C banana
C melon
C orange
C kiwi
C melon
但是,我只想删除一个group
,如果该组包含至少两行且fruit value
为"草莓",这意味着最终结果应该包括组B。我如何实现这一点?
更改为transform('sum')
n = 2
out = df[~(df.fruit.eq('strawberry').groupby(df.group).transform('sum')>=n)]
out
Out[108]:
group fruit
5 B kiwi
6 B banana
7 B strawberry
8 B orange
9 B kiwi
10 C banana
11 C melon
12 C orange
13 C kiwi
14 C melon