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

如何为DataFrame行分配从100开始的编号 重复行共用同编号

pandas按首次出现顺序为重复行分配复用连续编号实现

需求说明

针对存在重复行的DataFrame,为每一行分配从100起始的编号:

  • 首次出现的唯一内容分配连续递增的新编号
  • 后续遇到重复内容直接复用该内容首次出现时对应的编号
  • 预期编号序列效果:100, 101, 101, 102, 103, 103, 103

原有代码问题

直接遍历df对象时,循环获取到的是DataFrame的列名,而非每行的内容,因此生成的映射关系和行重复判断无关,才会输出错误的编号结果。
原有错误代码:

d = {ni: indi for indi, ni in enumerate(df, start=100)}
index = [d[ni] for ni in df]

测试数据集:

data = { 'ID':['161464','146446','146446','368416','464344','464344','464344'],
'Name':['Jen','Zach','Zach','Rachel','Scott','Scott','Scott']}

正确实现方案

首先导入pandas并初始化测试DataFrame:

import pandas as pd
df = pd.DataFrame(data)

方案1:按指定列判断重复(推荐,性能更好)

如果以某一列(比如示例中的ID列)作为重复判断依据,直接使用pandas内置的factorize()方法即可,该方法会自动为首次出现的唯一值分配从0开始的连续整数,重复值复用对应整数,加100就能得到目标编号:

# 以ID列为重复判断依据生成编号
df['assign_id'] = df['ID'].factorize()[0] + 100

运行后得到的结果完全匹配预期:

IDNameassign_id
161464Jen100
146446Zach101
146446Zach101
368416Rachel102
464344Scott103
464344Scott103
464344Scott103

方案2:按整行内容判断重复

如果需要所有列内容完全一致才判定为重复,可将每行转为元组后再调用factorize():

df['assign_id'] = df.apply(tuple, axis=1).factorize()[0] + 100

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.22 16:12:26