pandas dataframe如何删除组内特定值出现≥2次的整个分组
Pandas分组删除规则调整实现方案
原有逻辑是判断分组内是否存在任意strawberry行就删组,现在调整为统计分组内strawberry的行数≥2才删组,只需要把原来transform('any')的存在判断替换为计数判断即可。
可用实现代码
方法1:transform+sum计数(性能更优,适合大数据量)
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) # 核心逻辑:统计每个分组内strawberry的行数,仅保留行数小于2的分组 res = df[df.fruit.eq('strawberry').groupby(df.group).transform('sum') < 2] print(res)
输出结果:
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
方法2:groupby.filter(写法更直观)
如果更习惯分组过滤的写法,可以用filter方法直接按分组规则筛选:
res = df.groupby('group').filter(lambda g: g['fruit'].eq('strawberry').sum() < 2)
两种方法都可以实现保留B组、C组,删除A组的需求,可根据使用习惯选择。
内容的提问来源于stack exchange,提问作者sampeterson
相关产品推荐
相关产品推荐

