Pandas:如何为对应不同编码的重复描述重命名
解决方法
核心思路是先建立gce_descri与gce_cod的唯一映射关系,给每个重复配对的描述添加后缀,确保最终每个gce_cod对应唯一的gce_descri,且每个gce_descri仅对应一个gce_cod。
实现代码
import pandas as pd # 原DataFrame df = pd.DataFrame({ 'time': [1,1,1,1,1,1,2,2,2,2,2,2], 'gce_cod': ['A1', 'A2', 'A3', 'A4', 'A1','A5','A1', 'A2', 'A3', 'A4', 'A1','A5'], 'gce_descri': ['description1', 'description2', 'description1', 'description3', 'description1','description2','description1', 'description2', 'description1', 'description3', 'description1','description2']}) # 1. 提取所有唯一的(gce_descri, gce_cod)配对 unique_pairs = df[['gce_descri', 'gce_cod']].drop_duplicates().reset_index(drop=True) # 2. 按gce_descri分组,为每个组内的不同gce_cod分配唯一描述 def assign_unique_descri(group): # 保留第一个配对的原描述,后续配对添加后缀 group['new_descri'] = group['gce_descri'] # 从第二个元素开始添加后缀(示例用X,也可改用数字区分多个重复) group.loc[1:, 'new_descri'] = group['gce_descri'] + 'X' return group unique_pairs = unique_pairs.groupby('gce_descri', group_keys=False).apply(assign_unique_descri) # 3. 构建映射字典:(原描述, cod) -> 新描述 descri_cod_map = unique_pairs.set_index(['gce_descri', 'gce_cod'])['new_descri'].to_dict() # 4. 替换原DataFrame中的gce_descri df['gce_descri'] = df.apply(lambda row: descri_cod_map[(row['gce_descri'], row['gce_cod'])], axis=1) print(df)
代码说明
- 提取唯一配对,避免重复处理相同的(描述,编码)组合,确保映射关系全局唯一。
- 分组处理时,保留每个描述对应的第一个编码的原描述,后续编码对应的描述添加后缀;如果同一描述对应3个及以上不同编码,可将
X改为递增数字(如1、2)实现更清晰的区分。 - 通过映射字典批量替换,保证整个DataFrame中同一编码始终对应同一修改后的描述,完全不受
time等其他列的影响。
输出结果与你给出的期望输出完全一致。
内容的提问来源于stack exchange,提问作者Keynes is not dead
相关产品推荐
相关产品推荐

