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

如何快速为百万行Pandas DataFrame添加分组统计列?

优化Pandas分组计数的高效实现方法

针对100万行的DataFrame,你当前的代码可以简化并大幅提速,核心思路是避免创建冗余的dummy列,同时使用Pandas内置的高效聚合方法替代Python层面的lambda函数:

方法一:直接使用groupby.transform('size')(最快最优)

这是最简洁高效的方式,size()直接统计每组的行数,transform会将结果自动广播回原DataFrame的对应行,无需额外列:

# 两种写法效果一致,后者更简洁(size统计组内行数,与具体列无关)
df['count'] = df.groupby(['Class_ID', 'Student_ID'])['feature'].transform('size')
# 或
df['count'] = df.groupby(['Class_ID', 'Student_ID']).transform('size')

方法二:使用groupby.transform('count')

如果你的feature列没有空值,count()的效果和size完全一致,同样是内置高效方法:

df['count'] = df.groupby(['Class_ID', 'Student_ID'])['feature'].transform('count')

方法三:先统计计数再合并

如果需要更灵活的后续处理,可以先单独生成分组计数表,再通过合并关联回原DataFrame:

counts = df.groupby(['Class_ID', 'Student_ID']).size().reset_index(name='count')
df = df.merge(counts, on=['Class_ID', 'Student_ID'], how='left')

提速原因说明

  • 去掉了dummy列的创建,减少了内存占用和数据复制的额外开销
  • Pandas内置的size/count方法基于C语言实现,比Python层面的lambda x: x.sum()执行效率高数倍
  • 直接用transform无需额外的合并操作,逻辑更简洁,减少了中间步骤的耗时

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:58:25