将DF1与DF2与if-else语句进行比较
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将DF1与DF2与if-else语句进行比较相关的知识,希望对你有一定的参考价值。
我有两个数据框,我想逐行比较它们,并将结果存储在一个新的数据框中。
我想要做的是条件比较,如果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中的值。
答案
您可以减去两个数据帧并取绝对值,并使用带有[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
以上是关于将DF1与DF2与if-else语句进行比较的主要内容,如果未能解决你的问题,请参考以下文章
Scala - 如果 DF1 中的数据与 DF2 中的列匹配,则从 DF1 中删除记录 [重复]