You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助:对比两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 08:25:21