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

按共有唯一键对比两个DataFrame,定位不同行对应的差异列

解决方案

你可以先按唯一键A合并两个表,再逐行对比对应字段的差异即可,完整实现代码如下:

import pandas as pd

# 示例数据构造
df1 = pd.DataFrame({
    'A': ['V', 'W', 'X', 'Y', 'Z'],
    'B': [10,9,8,7,6],
    'C': [5,18,7,9,5],
    'D': [18,11,12,7,3],
    'E': [20,13,5,8,90]
})
df2 = pd.DataFrame({
    'A': ['V', 'W', 'X', 'Y', 'Z'],
    'B': [30,9,8,36,6],
    'C': [5,18,7,9,5],
    'D': [18,11,12,7,3],
    'E': [20,9,5,8,90]
})

# 1. 按唯一键A合并两个表,用后缀区分两个表的同名字段
merged_df = df1.merge(df2, on='A', suffixes=('_left', '_right'))
# 2. 定义需要对比的字段(排除唯一键A)
compare_columns = [col for col in df1.columns if col != 'A']

# 3. 定义逐行找差异字段的函数
def find_diff_columns(row):
    diff_cols = []
    for col in compare_columns:
        if row[f"{col}_left"] != row[f"{col}_right"]:
            diff_cols.append(col)
    # 存在多列差异时用逗号拼接,可根据需求调整返回格式
    return ','.join(diff_cols) if diff_cols else None

# 4. 计算差异字段,过滤无差异的行得到最终结果
merged_df['key'] = merged_df.apply(find_diff_columns, axis=1)
df3 = merged_df[merged_df['key'].notnull()][['A', 'key']].reset_index(drop=True)
print(df3)

运行后输出结果和你预期一致:

A key
0  V   B
1  W   E
2  Y   B

说明

如果你的场景中允许同一行出现多列差异,上面的代码会自动把所有差异列名拼接返回,无需修改逻辑;如果只需要判断是否存在差异,也可以直接调整返回值为布尔类型即可。

内容的提问来源于stack exchange,提问作者Hamouza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:45:07