比较具有给定容差范围的两个数据帧

Comparing two data frames with a given tolerance range

我有两个具有相同列数和相同行大小的数据框。我正在比较 df1 中的第一行和 df2 中的第一行,比较 df1 中的第二行和 df2 中的第二行等等,以查看有多少特征差异。此代码工作正常,但考虑到完全匹配。

Df1:

    var1  var2  var 3
1   30     65    100
2   40     32    200
3   25     64    500

Df2:

    var1  var2  var 3
1   30     65    100
2   80     77    50
3   22     60    499
In: differences = np.zeros(len(df1))
    for i in df1:
    differences += np.where(df1[i]!=df2[i],1,0)
    print(differences)

输出是一个数组,其中returns每行之间的差异数:

In: print(differences)
         [0. 3. 3.]

很好,但是,我想在比较值时考虑公差范围。因此,值不必完全相同,我会添加 5 的公差范围。因此,如果 df1 中的值为 25,df2 中的值为 22,那么它们应该相同。 所需的输出是:

In: print(differences)
         [0. 3. 0.]

因为如果我们查看 df1 和 df2 中的第三行,如果值为 5,则这些值落在容差范围内。 有什么想法可以实现吗?

尝试使用 np.isclose() :

differences = np.zeros(len(df1))
for i in df1:
    differences += np.where(~np.isclose(df1[i],df2[i],atol = 5),1,0)
print(differences)

输出:

[0. 3. 0.]