当组中的特定值至少出现两次时,从pandas数据帧中删除该组



我有一个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

最新更新