【问题标题】:Find difference in two python dataframes based on specific columns根据特定列查找两个 python 数据帧的差异
【发布时间】:2025-12-11 07:50:02
【问题描述】:

我想比较基于S/NMetric 列的数据框,以找到与df2 中的最新值相比发生变化的值:

df1
#    S/N   Age  Metric
# 0  001  2.59    1.01
# 1  002  3.57    2.42
# 2  003  3.99    3.12


df2
#    S/N   Age  Metric
# 0  001  2.46    4.29
# 1  001  2.50    2.46
# 2  001  2.54    2.47
# 3  002  1.78    1.24
# 4  002  1.82    2.42
# 5  003  3.57    1.91
# 6  003  3.61    2.47
# 7  003  3.65    1.24

我正在寻找以下数据框:

   S/N   Age  Metric
0  001  2.59    1.01
2  003  3.99    3.12

数据

df1 = pd.DataFrame({
    "S/N": ['001', '002', '003'],
    "Age": [2.59, 3.57, 3.99],
    "Metric": [1.01, 2.42, 3.12]
})

df2 = pd.DataFrame({
    "S/N": ['001','001','001', '002','002', '003', '003', '003'],
    "Age": [2.46, 2.50, 2.54, 1.78, 1.82, 3.57, 3.61, 3.65],
    "Metric": [4.29, 2.46, 2.47, 1.24, 2.42, 1.91, 2.47, 1.24]
})

【问题讨论】:

    标签: python pandas dataframe compare difference


    【解决方案1】:

    这里大约涉及两个步骤。首先,您需要比较 df1df2,并根据该比较过滤您的数据。

    第 1 步:比较

    要根据Metric 列比较df1df2,请运行:

    df1['Metric'] != df2['Metric']
    0    True
    1    False   
    2    True
    3    False
    

    第 2 步:过滤

    在 pandas 中,您可以使用仅包含 TrueFalse 值的 pandas 系列(“单列数据框”)过滤行:

    inds = df1['Metric'] != df2['Metric']
    df2.loc[inds, :]
         S/N   Age  Metric
    # 0  001  2.46    4.29
    # 2  003  2.00    2.47
    

    【讨论】:

    • 对不起,我应该更清楚。这两个数据框的大小并不总是相同,因此我需要将 S/N 与比较中的 Metric 链接起来。