Pandas DataFrame如何删除同id对应行数小于指定阈值的所有行
实现方案(基于Pandas)
你可以直接用Pandas内置的分组过滤能力实现需求,不需要手动遍历id,效率更高,以下是两种常用实现方式:
方案1:groupby + filter (写法最简洁)
直接通过分组过滤保留行数符合要求的id对应所有行:
import pandas as pd # 设定行数阈值 threshold = 50 # 过滤后赋值给新的df即可 df = df.groupby('id').filter(lambda x: len(x) >= threshold)
该方法适合中小体量数据集,代码可读性最高。
方案2:transform + 布尔索引(性能最优)
针对百万级以上的大数据集,用transform预计算每个id的行数再筛选,性能比方案1高30%以上:
threshold = 50 # 给每行新增对应id的总计数字段 df['id_row_count'] = df.groupby('id')['id'].transform('count') # 筛选符合要求的行后删除临时计数字段 df = df[df['id_row_count'] >= threshold].drop(columns='id_row_count')
手动遍历实现(不推荐,效率低)
如果你确实需要按遍历id的逻辑实现,可以参考以下写法:
threshold = 50 keep_ids = [] # 遍历所有唯一id for id_val in df['id'].unique(): # 统计当前id对应的行数 if len(df[df['id'] == id_val]) >= threshold: keep_ids.append(id_val) # 只保留符合要求的id对应数据 df = df[df['id'].isin(keep_ids)]
内容的提问来源于stack exchange,提问作者user3613025
相关产品推荐
相关产品推荐

