如何使用Pandas删除分类出现次数不足50的行?
解决DataFrame筛选代表性足够分类行的问题
嘿,我来帮你搞定这个筛选问题!你的循环写法出错了——每次循环都会把h重新赋值为排除当前分类的结果,最后得到的只会是排除最后一个分类后的数据集,完全和你想要的“保留符合条件分类”相反。
最简单的解决方案:直接用isin匹配符合条件的分类
你已经通过uu得到了出现次数≥50的分类索引,直接用这个索引来筛选原DataFrame就行,一行代码搞定:
# 保留classif属于uu索引的所有行 filtered_df = df[df['classif'].isin(uu.index)]
更简洁的一步到位写法:用groupby.filter
如果你不想先计算time和uu,可以直接通过分组过滤实现,一步完成统计和筛选:
# 直接筛选出分组行数≥50的所有行 filtered_df = df.groupby('classif').filter(lambda x: len(x) >= 50)
为什么你的循环不行?
你写的循环逻辑是反的:
for enough in uu.index.tolist(): h=df.loc[df.classif != enough]
每次循环都会把h设置为排除当前enough分类的DataFrame,而不是保留它。而且每次循环都会覆盖h,最后h只会是排除最后一个enough分类的结果,完全不符合你的需求。
⚠️ 小提醒:注意你例子里的大小写问题(比如Cat和cat),如果实际数据中分类名大小写不一致,isin会匹配失败,记得先统一大小写或者确认数据中的分类名格式一致。
内容的提问来源于stack exchange,提问作者akhetos
相关产品推荐
相关产品推荐

