Pandas DataFrame 中将连续同值为组的重复ID替换为未使用最小数值
完整实现代码
import numpy as np import pandas as pd # 生成原始DataFrame df = pd.DataFrame({'ID': [1, 1, 2, 5, 5, 6, 1, 1, 2, 2, 5, 9, 1, 2, 3, 3, 3, 5]}) # 步骤1:标记连续相同ID的分组 df['group'] = df['ID'].ne(df['ID'].shift()).cumsum() # 步骤2:构建分组到替换值的映射 used_values = set() group_replace_map = {} for group_id, original_id in df.groupby('group')['ID'].first().items(): if original_id not in used_values: replace_val = original_id else: # 查找最小的未使用正整数 replace_val = 1 while replace_val in used_values: replace_val += 1 group_replace_map[group_id] = replace_val used_values.add(replace_val) # 步骤3:应用映射得到最终结果 df['ID'] = df['group'].map(group_replace_map) df = df.drop('group', axis=1) print(df)
运行输出
ID 0 1 1 1 2 2 3 5 4 5 5 6 6 3 7 3 8 4 9 4 10 7 11 9 12 8 13 10 14 11 15 11 16 11 17 12
内容的提问来源于stack exchange,提问作者Murcie
相关产品推荐
相关产品推荐

