如何在Pandas DataFrame中为重复标识字符串添加递增序号后缀
问题
我需要修改Pandas DataFrame中的Identifier列,原始数据如下:
Name. Age Identifier Peter Pan 13 PanPe James Jones 24 JonesJa Peter Pan 22 PanPe Chris Smith 19 SmithCh
期望修改后得到:
Identifier PanPe01 JonesJa01 PanPe02 SmithCh01
要求为首次出现的标识字符串添加01后缀,重复项依次添加02、03等递增序号。我已经了解基础逻辑代码:
combo="PanPe" Counts={} if combo in counts: count=counts[combo] counts[combo]=count+1 else: counts[combo]=1
作为Python新手,需要完整代码示例实现整列遍历处理。
解决方案
方法一:利用Pandas内置方法(高效简洁)
你可以用Pandas的groupby和cumcount方法快速实现,这比手动遍历性能更好,代码更简洁:
import pandas as pd # 构造原始DataFrame data = { 'Name.': ['Peter Pan', 'James Jones', 'Peter Pan', 'Chris Smith'], 'Age': [13, 24, 22, 19], 'Identifier': ['PanPe', 'JonesJa', 'PanPe', 'SmithCh'] } df = pd.DataFrame(data) # 生成带序号的新Identifier列 df['Identifier'] = df['Identifier'] + df.groupby('Identifier').cumcount().add(1).astype(str).str.zfill(2) # 查看结果 print(df['Identifier'])
代码说明:
groupby('Identifier'):按标识字符串分组cumcount():对每组内的行从0开始计数add(1):把计数转为从1起始(对应01、02的序号)str.zfill(2):把数字格式化为两位字符串,不足补0- 最后将原标识和格式化后的序号拼接
运行后输出:
0 PanPe01 1 JonesJa01 2 PanPe02 3 SmithCh01 Name: Identifier, dtype: object
方法二:基于你的基础逻辑实现手动遍历
如果想更直观理解遍历过程,可以用你提供的字典计数逻辑扩展:
import pandas as pd # 构造原始DataFrame data = { 'Name.': ['Peter Pan', 'James Jones', 'Peter Pan', 'Chris Smith'], 'Age': [13, 24, 22, 19], 'Identifier': ['PanPe', 'JonesJa', 'PanPe', 'SmithCh'] } df = pd.DataFrame(data) counts = {} new_identifiers = [] # 遍历每一行的Identifier值 for combo in df['Identifier']: if combo in counts: counts[combo] += 1 else: counts[combo] = 1 # 拼接序号并格式化为两位 new_id = f"{combo}{str(counts[combo]).zfill(2)}" new_identifiers.append(new_id) # 更新DataFrame列 df['Identifier'] = new_identifiers print(df['Identifier'])
这个版本完全沿用你熟悉的字典计数逻辑,逐行处理并生成新标识。
内容的提问来源于stack exchange,提问作者Plausible Penguin
相关产品推荐
相关产品推荐

