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

如何在R中为dataframe的id字段重复项分配符合规则的唯一新值

实现方案(Python + Pandas)

直接按以下步骤操作即可,代码可直接运行:

完整代码示例

import pandas as pd

# 1. 构造示例数据,可替换为自己的DataFrame
df = pd.DataFrame({
    'id': ['AB22', 'AB25', 'AB25', 'AB25', 'AB50', 'AB35', 'AB35', 'AB40'],
    'children': [2, 1, 1, 3, 2, 1, 1, 1],
    'age': [31, 27, 25, 33, 40, 37, 39, 41]
})

# 2. 提取所有id的数值部分,计算最大值
max_id_num = df['id'].str.extract(r'(\d+)', expand=False).astype(int).max()

# 3. 标记重复id:每个id第一次出现的记录保留,后续重复的标记为需要修改
duplicate_flag = df['id'].duplicated(keep='first')

# 4. 生成新的id数值序列,从原最大数值+1开始递增
new_id_count = duplicate_flag.sum()
new_num_seq = range(max_id_num + 1, max_id_num + 1 + new_id_count)

# 5. 替换重复id
# 固定前缀为AB的写法:
df.loc[duplicate_flag, 'id'] = [f'AB{num}' for num in new_num_seq]
# 如果id前缀不固定,用下面的写法替代上行即可:
# prefix_list = df.loc[duplicate_flag, 'id'].str.extract(r'([A-Za-z]+)', expand=False)
# df.loc[duplicate_flag, 'id'] = [f"{prefix}{num}" for prefix, num in zip(prefix_list, new_num_seq)]

# 输出结果验证
print(df)

逻辑说明

  • 用正则提取id中的数字部分,确保新生成的id数值一定大于原所有id的数值最大值
  • duplicated(keep='first')保证每个id的第一条记录不变,只有后续重复的条目会被分配新id
  • 新id的前缀默认和原id前缀保持一致,适配前缀不固定的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:18:05