基于合并列对比两个DataFrame及重复行标记技术需求
实现DataFrame重复行标记及原有逻辑优化
当然可以实现这个需求,只需要在原有逻辑基础上增加对View Name、Column Name、Column Description三字段组合的匹配判断即可,具体修改方案如下:
步骤说明
- 先从主列表df2(对应代码里的
view_col_desc_df)中提取包含三个目标字段的唯一组合集合,提升查找效率 - 修改原判断函数,优先校验当前行的三字段组合是否存在于df2的组合中,存在则标记
duplicate row - 保留原有View、Column不存在的判断逻辑,同时修正原有代码里的漏洞(原逻辑未关联View与Column的对应关系,会导致误判)
修改后的完整代码
# 从主列表提取三字段的唯一组合,转成集合加快查找速度 df2_unique_combinations = set(view_col_desc_df[['View Name', 'Column Name', 'Column Description']] .astype(str) .apply(tuple, axis=1)) # 原有提取待对比数据的逻辑保留 col_desc_diff_df = cd_diff[cd_diff['_merge'] == 'left_only'][['View Name', 'Column Name', 'Column Description']] selected_cols_df = view_col_desc_df[['View Name','Column Name']] selected_cols_df1 = selected_cols_df.drop_duplicates(subset=['View Name','Column Name']) def compare_columns_cd(row): # 优先判断是否为完全匹配的重复行 current_combination = tuple(row[['View Name', 'Column Name', 'Column Description']].astype(str)) if current_combination in df2_unique_combinations: return 'duplicate row' # 判断View是否存在 if row['View Name'] not in selected_cols_df1['View Name'].astype(str).values: return 'View Not Found' # 关联View判断Column是否存在(修正原代码的误判问题) target_view_cols = selected_cols_df1[selected_cols_df1['View Name'] == row['View Name']]['Column Name'].astype(str).values if row['Column Name'] not in target_view_cols: return 'Column Not Found' return 'NA' col_desc_diff_df['Reason for Diff'] = col_desc_diff_df.apply(compare_columns_cd, axis=1)
额外说明
原代码中判断Column是否存在的逻辑存在漏洞:仅单独检查Column Name是否在df2的所有Column中,未关联对应的View Name,会出现“View存在但Column属于其他View”的误判,上述代码已同步修正该问题,确保是在同一View下校验Column的存在性。
内容的提问来源于stack exchange,提问作者rose
相关产品推荐
相关产品推荐

