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

如何快速统计Pandas DataFrame中各重复行的出现次数?

高效统计Pandas DataFrame重复行次数的方案

你当前用的循环方法效率极低,150万行数据下会慢到离谱——每一次循环都要对全表做布尔索引扫描,时间复杂度是O(n*m),完全没必要。下面是两个最快的解决方案:

方案1:给原DataFrame所有行添加重复次数列

如果需要保留原DataFrame的所有行,同时给每行加上自己的重复次数,用groupby+transform的向量化操作,这是最快的方式:

# 给每行添加对应的重复次数列
dupDF['count'] = dupDF.groupby(['variable1', 'variable2'])['variable1'].transform('count')

transform会把每个分组的计数结果广播到组内的每一行,全程是Pandas内部优化的C级操作,百万级数据秒出结果。

方案2:只保留唯一行并添加计数列

如果只需要去重后的唯一行,加上对应的重复次数,用下面两种方法二选一:

方法A:用value_counts

# 直接统计唯一行的重复次数,转成DataFrame
uniqDF = dupDF.value_counts(subset=['variable1', 'variable2']).reset_index(name='count')

方法B:用groupby聚合

# 分组后统计每组大小,重命名计数列
uniqDF = dupDF.groupby(['variable1', 'variable2'], as_index=False).size().rename(columns={'size': 'count'})

这两种方法都是向量化操作,比你的循环方法快几个数量级。

另外你之前用pivot_table出错,是因为这个函数是用来做透视表的,核心逻辑是按行/列维度聚合,和“统计整行重复次数”的需求不匹配,所以会出现列缺失,完全没必要用它。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:58:11