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

如何为Pandas DataFrame中特定值的第n次出现标记序号?

给重复值添加出现次数计数列的高效方法

嘿,针对你处理8万+行DataFrame的需求,我得说你当前用循环遍历唯一值再追加结果的方法效率太低了——Pandas的循环操作在大数据集上会拖慢速度,咱们直接用Pandas内置的矢量化方法就能完美解决,而且快得多!

最优解决方案

直接使用groupby()结合cumcount()函数,一行代码搞定:

import pandas as pd

# 假设你的原DataFrame叫df,目标列是val_id
df['counter'] = df.groupby('val_id').cumcount() + 1

方法解释

  • groupby('val_id'):把整个DataFrame按照val_id的取值分组,相同值的行会被分到同一组里
  • cumcount():给每个组内的行从0开始顺序编号
  • 加1是因为你需要的是“第1次、第2次”这样的计数,而cumcount()默认从0开始

效果演示

举个小例子看看实际效果:

# 模拟测试数据
df = pd.DataFrame({'val_id': ['v1', 'v2', 'v1', 'v1', 'v2', 'v3']})
df['counter'] = df.groupby('val_id').cumcount() + 1
print(df)

输出结果:

val_id  counter
0     v1        1
1     v2        1
2     v1        2
3     v1        3
4     v2        2
5     v3        1

为什么比你的循环方法好?

你的循环方法需要遍历每个唯一值,每次都要切片筛选数据、创建新的DataFrame再追加,这在8万行的数据集上会产生大量的内存操作和重复计算,速度会非常慢。而上面的矢量化方法是Pandas底层优化过的,完全避免了循环,处理大数据集的效率能提升几十甚至上百倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:44:47