[英]Compare two dataframes' columns with tolerances
我有两个数据框,我想逐行比较它们,并将结果存储在一个新的中。
我想要的是进行条件比较,如果 df1 中的值与 df2 中的值不同(或大于公差),我们希望将 df2 中的值复制到新的 dataframe 中。 如果值相同(或在公差范围内),则在新的 dataframe 中返回 null。
对于每一列,我会添加一个容差:年龄容差:3,工资容差:500,奖金容差:100
df1 = pd.DataFrame({'Age':[22,55,35],'salary':[1500,2000,1000],'bouns':[500,222,124]})
df2 = pd.DataFrame({'Age':[23,55,65],'salary':[1400,1000,3000 ],'bouns':[100,222,500]})
In [3]: df1
Age salary bonus
0 22 1500 500
1 55 2000 222
2 35 1000 124
In [3]: df2
Age salary bonus
0 23 1400 100
1 55 1000 222
2 65 3000 500
output 应该是这样的:
In [4]: df3
Age salary bonus
0 100
1 1000
2 65 3000 500
我尝试的是使用 isclose function 来比较两个数据帧的值与特定容差。 它工作正常。 但它返回 boolean 真或假。
df3 = np.isclose(df1["Age"], df2["Age"], atol=3)
我想用if-else语句,所以如果条件为True,返回null,如果为False,返回df2中的值。
您可以减去两个数据帧并取绝对值,并使用带有[3,500,100]
的列表来逐列查看哪些值高于公差。 然后DataFrame.where
将条件为False
的值替换为空字符串:
df2.where(df2.sub(df1).abs().gt([3,500,100]), '')
Age salary bouns
0 100
1 1000
2 65 3000 500
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.