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

如何用for循环创建列?为DataFrame生成ID重复次数对应列

问题:为DataFrame添加ID重复次数列,基于groupby实现

我已经用for循环统计了DataFrame中ID的重复次数,现在需要新增一列记录每个对应ID的重复总数——也就是给df['ID']添加一列,显示该ID的出现次数,同时想了解如何用groupby命令实现这个需求。

我的现有代码:

test = df['ID'].sort_values(ascending=True)

rep = 0
for k in range(0,len(test)-1):
  if(test[k]==test[k+1]):
    rep += 1
    if(k==len(test)-2):
      print(test[k],',', rep+1)
  else:
    print(test[k],',', rep+1)
    rep = 0

输出结果:

7614381 , 1 
349444 , 5 
4577800 ,7

解决方案

你不需要用循环实现这个需求,pandas提供了更高效的内置方法,以下两种方式都能快速完成:

方法1:使用value_counts映射

这是最简洁的方式,先统计每个ID的出现次数,再映射到新列:

df['重复次数'] = df['ID'].map(df['ID'].value_counts())

df['ID'].value_counts()会返回一个以ID为索引、出现次数为值的Series,map方法会自动将每行的ID对应到对应的次数,填充到新列中。

方法2:使用groupby + transform

如果你想基于groupby实现,用transform可以将分组统计的结果广播到原DataFrame的每一行:

df['重复次数'] = df.groupby('ID')['ID'].transform('count')
  • groupby('ID'):按ID对DataFrame分组
  • transform('count'):计算每组的行数(即该ID的出现次数),并将结果扩展到原DataFrame的对应行,保证每行都能获取到所属ID的总次数。

为什么不用循环?

循环的方式在数据量较大时会非常慢,而上述两种方法都是pandas的向量化操作,底层用C实现,性能远高于Python循环,代码也更简洁易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:00:53