Pandas进阶筛选:如何对含2000万行整数列的DataFrame实现值最多重复1000次的筛选?
Pandas进阶筛选:如何对含2000万行整数列的DataFrame实现值最多重复1000次的筛选?
嗨,太懂你这种大数据处理的痛点了——2000万行的量级,用循环逐行处理不仅写起来繁琐,运行效率也实在拉胯。你原来的逻辑是先随机打乱索引,再逐个计数保留每个值的前1000条记录,其实完全可以用Pandas的分组魔法来简化操作,效率还能提升一大截!
高效解决方案:GroupBy + 随机采样
核心思路是按目标整数列分组,对每个分组随机打乱后取前1000行,完美匹配你原来的随机筛选需求:
首先定义一个分组内的筛选函数:
def filter_rows(group, max_repeat_count): # 先随机打乱分组内的所有行,再取前max_repeat_count条 return group.sample(frac=1).head(max_repeat_count)
然后用groupby调用这个函数:
# 把"column_name"替换成你要处理的整数列名 filtered_df = dataframe.groupby( "column_name", group_keys=False, # 避免分组键被添加到结果的索引中 sort=False # 不排序分组,提升大数据处理的效率 ).apply(filter_rows, 1000)
为什么这个方法更好?
- 效率碾压循环:Pandas的分组操作是底层优化过的,避免了Python层面的逐行遍历,处理2000万行数据的速度会快很多
- 代码更简洁:几行代码就完成了原来几十行循环的逻辑,可读性和维护性都更强
- 保留随机性:
sample(frac=1)会随机打乱每个分组内的行,和你原来用np.random.permutation实现的随机筛选逻辑完全一致
补充说明
如果你不需要随机筛选,只是想保留每个值的前1000条记录(按原数据顺序),可以把函数里的sample(frac=1)去掉,直接返回group.head(max_repeat_count)就行。
备注:内容来源于stack exchange,提问作者Radek Svoboda
相关产品推荐
相关产品推荐

