比较两个数据帧列的公差

2024-06-02 15:58:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,我想逐行比较它们,并将结果存储在一个新的数据帧中

我要做的是条件比较,如果df1中的值与df2中的值不同(或超过公差),我们要将df2中的值复制到新的数据帧中。如果值相同(或在公差范围内),则在新数据帧中返回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

输出应如下所示:

In [4]: df3

   Age  salary   bonus
0                100
1        1000   
2   65   3000    500

我尝试的是使用isclose函数比较两个数据帧的值和特定的容差。它工作正常。但它返回布尔值true或false

df3 = np.isclose(df1["Age"], df2["Age"], atol=3)

我想使用if-else语句,因此如果条件为True,则返回null,如果为False,则返回df2中的值


Tags: 数据indataframeage条件nullpddf1
1条回答
网友
1楼 · 发布于 2024-06-02 15:58:29

您可以减去这两个数据帧并获取绝对值,然后使用带有[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

相关问题 更多 >