首页 > 解决方案 > 如何比较具有相同列但行数不同的两个数据框?

问题描述

df1=

  A   B  C  D

  a1  b1 c1 1

  a2  b2 c2 2

  a3  b3 c3 4

df2=

  A   B  C  D

  a1  b1 c1 2

  a2  b2 c2 1

我想比较两个数据框中“D”列的值。如果两个数据框的行数相同,我就会这样做。

newDF = df1['D']-df2['D']

但是,有时行数不同。我想要一个结果数据框,它显示这样的数据框。

结果DF=

  A   B  C  D_df1 D_df2  Diff

  a1  b1 c1  1     2       -1

  a2  b2 c2  2     1        1

编辑:如果 df1 和 df2 中的 A、B、C 中的第一行相同,那么只有比较每个数据帧的 D 列的第一行。同样,对所有行重复。

标签: pythonpandas

解决方案


使用mergedf.eval

df1.merge(df2, on=['A','B','C'], suffixes=['_df1','_df2']).eval('Diff=D_df1 - D_df2')

Out[314]:
    A   B   C  D_df1  D_df2  Diff
0  a1  b1  c1      1      2    -1
1  a2  b2  c2      2      1     1

推荐阅读