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

Pandas:DataFrame存在重复ID,如何生成唯一标识?

解决方法:生成结合原ID与组内计数的唯一NewID

这问题我熟!想要生成你说的这种11、21、22、41格式的唯一ID,用pandas的groupby配合cumcount就能轻松实现,给你一步步拆解:

1. 先构造你的目标DataFrame

首先先把你提到的数据集用代码还原出来:

import pandas as pd

df = pd.DataFrame({
    'id': [1, 2, 2, 4],
    'animal': ['dog', 'cat', 'bear', 'mouse'],
    'Seq': [14, 17, 19, 23]
})

2. 生成组内递增计数器

按id分组后,用cumcount()给每个组内的行分配序号(注意cumcount默认从0开始,所以要加1让计数从1起始):

# 新增组内计数器列,从1开始计数
df['counter'] = df.groupby('id').cumcount() + 1

3. 生成唯一NewID

有两种常用方式生成你要的NewID,选哪种看你的需求:

方式一:字符串拼接(适配多位数ID)

如果你的id可能是多位数(比如10、100),用字符串拼接更稳妥,避免数值计算导致的位数混乱:

df['NewID'] = df['id'].astype(str) + df['counter'].astype(str)

方式二:数值计算(适合个位数ID)

如果你的id都是个位数,直接用数值组合更高效,得到的是数值型的NewID:

df['NewID'] = df['id'] * 10 + df['counter']

最终结果

执行完上面的代码后,你的DataFrame会变成这样:

idanimalSeqcounterNewID
1dog14111
2cat17121
2bear19222
4mouse23141

简化写法(可选)

如果你不需要保留counter列,可以用链式操作一步到位:

# 字符串拼接版
df['NewID'] = df.groupby('id').cumcount().add(1).astype(str).radd(df['id'].astype(str))

# 数值计算版
df['NewID'] = df['id'] * 10 + df.groupby('id').cumcount().add(1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 08:52:36