Python 具有近似相等数值比较的左连接熊猫

Python 具有近似相等数值比较的左连接熊猫,python,pandas,numpy,Python,Pandas,Numpy,我使用以下方法在熊猫中进行左连接: merged_left = pd.merge(left=xrf_df, right=statistics_and_notes_df, how='left', left_on=depth_column_name, right_on='Core Depth') 但是,深度列名

我使用以下方法在熊猫中进行左连接:

merged_left = pd.merge(left=xrf_df,
                       right=statistics_and_notes_df, 
                       how='left', 
                       left_on=depth_column_name, 
                       right_on='Core Depth')
但是,深度列名称和“核心深度”列是浮点数。
是否有一种很好的方法来执行此左连接,以便比较结果大致相等,例如np.isclose()?

假设我们有以下DFs:

In [111]: a
Out[111]:
      a  b  c
0  3.03  c  3
1  1.01  a  1
2  2.02  b  2

In [112]: b
Out[112]:
      a  x
0  1.02  Z
1  5.00  Y
2  3.04  X
让我们将列设置为索引(已排序):

现在我们可以使用:


PS您可能需要使用
df.reindex(…,tolerance=)
参数来设置公差:
abs(index[indexer]-target)此功能将在下一版本(0.20.0)中开箱即用,方法是与参数
direction='nearest'
一起使用(可通过
tolerance
参数进行限制)。在此之前,这可能需要一些自定义编码。不幸的是,merge_asof中的容差参数是整数或TimeDelta。我需要一个类似于0.003的浮点值。如果我将tolerance关键字添加到reindex,这将非常有效。@user90855,很高兴我能提供帮助:)
In [113]: a = a.sort_values('a').set_index('a')

In [114]: b = b.assign(idx=b['a']).set_index('idx').sort_index()

In [115]: a
Out[115]:
      b  c
a
1.01  a  1
2.02  b  2
3.03  c  3

In [116]: b
Out[116]:
         a  x
idx
1.02  1.02  Z
3.04  3.04  X
5.00  5.00  Y
In [118]: a.join(b.reindex(a.index, method='nearest'), how='left')
Out[118]:
      b  c     a  x
a
1.01  a  1  1.02  Z
2.02  b  2  1.02  Z
3.03  c  3  3.04  X

In [119]: a.join(b.reindex(a.index, method='nearest'), how='left').rename(columns={'a':'a_right'})
Out[119]:
      b  c  a_right  x
a
1.01  a  1     1.02  Z
2.02  b  2     1.02  Z
3.03  c  3     3.04  X

In [120]: a.join(b.reindex(a.index, method='nearest'), how='left').rename(columns={'a':'a_right'}).reset_index()
Out[120]:
      a  b  c  a_right  x
0  1.01  a  1     1.02  Z
1  2.02  b  2     1.02  Z
2  3.03  c  3     3.04  X