如何为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
相关产品推荐
相关产品推荐

