如何修改代码导出应用重复行处理后的完整DataFrame?
需求与解决方案
需求概述
需对数据集完成三项处理任务:
- 基于A、B、C、D、E列识别重复行组
- 重复行中,若D列值为
abc,将对应E列值设为0 - 每个重复组内仅保留E列最大值的行,其余重复行E列设为0;新增
change列标记所有被修改的行
现有代码仅导出处理后的重复行,需修改为导出应用所有修改后的完整原数据集。
修改后代码
# 创建原DataFrame的副本,避免修改原始数据 df_processed = df.copy() # 标记所有属于重复组的行(包含每组首次出现的行) duplicate_cols = ['A', 'B', 'C', 'D', 'E'] is_duplicate_group = df_processed.duplicated(subset=duplicate_cols, keep=False) # 任务2:重复行中D列为'abc'的,将E设为0 m1 = is_duplicate_group & df_processed['D'].eq('abc') df_processed.loc[m1, 'E'] = 0 # 任务3:重复组内仅保留E列最大值的行,其余设为0 # 计算每个重复组的E列最大值 group_max_e = df_processed[is_duplicate_group].groupby(duplicate_cols)['E'].transform('max') # 标记重复组中E不等于最大值的行 m2 = is_duplicate_group & (df_processed['E'] != group_max_e) df_processed.loc[m2, 'E'] = 0 # 添加change列,标记所有被修改的行 df_processed['change'] = m1 | m2 # 导出完整的处理后数据集 df_processed.to_csv('full_processed_data.csv', index=False)
关键修改点
- 直接操作原数据的副本,确保保留所有非重复行,而非仅处理重复行
- 使用
duplicated(keep=False)标记重复组内的所有行(原代码仅标记第二次及以后出现的重复行) - 优化任务3的逻辑:通过分组求最大值精准定位需修改的行,避免原排序去重逻辑可能导致的误差
- 合并两类修改标记到
change列,完整记录所有被修改的行
内容的提问来源于stack exchange,提问作者sudha smitha
相关产品推荐
相关产品推荐

