请求协助:对比两个DataFrame并新增不匹配列名列
对比两个DataFrame并新增不匹配列名列
实现思路
以主键(如截图中的ID列)对齐两个DataFrame,逐行对比指定列的值,将每行不匹配的列名收集后合并为字符串,添加到第一个DataFrame的新列中。
基础实现代码
import pandas as pd # 假设df1、df2为待对比的两个DataFrame,ID为对齐主键 # 按主键对齐索引 df1 = df1.set_index('ID') df2 = df2.set_index('ID') # 获取两个DataFrame的共同列作为对比列 compare_cols = df1.columns.intersection(df2.columns) # 定义函数:提取当前行所有不匹配的列名 def get_mismatched_cols(row): mismatched = [] for col in compare_cols: if row[col] != df2.loc[row.name, col]: mismatched.append(col) # 将不匹配列名用逗号分隔返回,无匹配则返回空字符串 return ', '.join(mismatched) # 为df1新增记录不匹配列名的列 df1['不匹配列名'] = df1.apply(get_mismatched_cols, axis=1) # 恢复原索引(按需选择) df1 = df1.reset_index()
处理含缺失值的场景
如果DataFrame中存在NaN值,直接用!=会误判缺失值为不匹配,可修改判断逻辑:
import pandas as pd from pandas import isna # 对齐索引步骤同上 df1 = df1.set_index('ID') df2 = df2.set_index('ID') compare_cols = df1.columns.intersection(df2.columns) def get_mismatched_cols(row): mismatched = [] for col in compare_cols: val1 = row[col] val2 = df2.loc[row.name, col] # 排除两者均为缺失值的情况 if not (val1 == val2 or (isna(val1) and isna(val2))): mismatched.append(col) return ', '.join(mismatched) df1['不匹配列名'] = df1.apply(get_mismatched_cols, axis=1) df1 = df1.reset_index()
内容的提问来源于stack exchange,提问作者sujithdrone
相关产品推荐
相关产品推荐

