首页 > 解决方案 > 根据特定列查找两个 python 数据帧的差异

问题描述

我想根据S/NandMetric列比较数据框,以查找从 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]
})

标签: pythonpandasdataframecomparedifference

解决方案


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

第 1 步:比较

要根据 column进行比较df1,请运行:df2Metric

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

第 2 步:过滤

True在熊猫中,您可以使用仅包含或False值的熊猫系列(“单列数据框”)过滤行:

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

推荐阅读