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

基于Pandas的分组过滤:大数据集下的高效实现方案

高效实现按分组行数过滤DataFrame的方法

当处理超大规模数据集时,groupby.filter结合lambda的方式会因逐组遍历带来额外开销,以下两种方法能大幅提升效率:

方法1:先统计分组计数,再用布尔索引过滤

先计算每个Col1对应的行数,筛选出符合条件的分组值,再通过isin过滤原DataFrame:

# 计算每个Col1的行数
counts = df['Col1'].value_counts()
# 筛选出行数>2的Col1值
valid_groups = counts[counts > 2].index
# 过滤原DataFrame
filtered_df = df[df['Col1'].isin(valid_groups)]

这种方法通过向量化的计数操作替代逐组lambda调用,避免了分组遍历的开销,在大数据集上性能提升明显。

方法2:用transform结合内置聚合函数

利用groupby.transform将分组大小广播到每一行,直接通过布尔索引过滤:

filtered_df = df[df.groupby('Col1')['Col1'].transform('size') > 2]

这里用Pandas内置的size聚合函数替代lambda,transform会高效地将分组计算结果映射到原数据的每一行,整体操作都是向量化的,比lambda版本的filter快很多。

方法对比

  • groupby.filter(lambda x: len(x) > 2):需要对每个分组执行lambda函数,涉及大量函数调用和数据切片,大数据集下效率低下。
  • 上述两种方法:均基于向量化操作,Pandas内部会做优化(比如利用C扩展),内存和时间效率都远高于lambda过滤。

针对你的示例DataFrame(注意示例中Col1=2的行可能是输入时的标点错误,修正后所有分组行数都≤2,所以过滤结果为空),如果调整条件为len(x) >=2,两种方法都会保留Col1=1和Col1=2的行。

内容的提问来源于stack exchange,提问作者oneday

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:36:03