You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:44:51