我有两个数据帧:
A B
df1<- 45.5219 5.3179
0.9670 4.2212
A B
df2<- 1.0000 5.3178
0.1922 4.7881
0.0395 4.5975
0.0813 4.2215
对于B列值,存在+/- 0.03的不确定性值,意味着df1 [5.3179]与df2 [5.3178]大致相同,并且df1 [4.2212]与df2的值相同[ 4.2215]。
因此,我想删除df2中与df1大致相同的B值的行(在+/- 0.03的误差范围内),并为df2生成如下所示的数据帧:
A B
df2<- 0.1922 4.7881
0.0395 4.5975
答案 0 :(得分:4)
我知道NumPy broadcasting
,所以这里有 ab 使用它 -
a = df1.values
b = df2.values
df2_out = df2[~(np.abs(a[:,None,:] - b[None]) <= 0.03).any(0).any(1)]
示例运行 -
In [119]: a = df1.values
In [120]: b = df2.values
In [121]: df2[~(np.abs(a[:,None,:] - b[None]) <= 0.03).any(0).any(1)]
Out[121]:
A B
1 0.1922 4.7881
2 0.0395 4.5975
如果您希望仅与两个数据框中的B
列进行比较 -
In [136]: df2[~(np.abs(df1.B.values[:,None] - df2.B.values) <= 0.03).any(0)]
Out[136]:
A B
1 0.1922 4.7881
2 0.0395 4.5975
答案 1 :(得分:4)
使用Numpy Broadcasting和numpy.isclose
的组合,通过0.03
v1 = df1.values
v2 = df2.values
df2[~np.isclose(v2, v1[:, None], .03).any(0).any(1)]
A B
1 0.1922 4.7881
2 0.0395 4.5975