Python 如何合并浮动上的数据帧?

Python 如何合并浮动上的数据帧?,python,pandas,numpy,Python,Pandas,Numpy,如何在一个浮点列上合并两个数据帧?下面是一个可复制的示例。我确信这与两个浮点列不相等有关,但我希望得到一个解释,可能还有一个更优雅的解决方案 import pandas as pd import numpy as np left = pd.DataFrame({'a': np.arange(10, 11, .05)}) right = pd.DataFrame({'a': np.arange(10,11,.1), 'b': np.random.random_sample((10,))}) 尝

如何在一个浮点列上合并两个数据帧?下面是一个可复制的示例。我确信这与两个浮点列不相等有关,但我希望得到一个解释,可能还有一个更优雅的解决方案

import pandas as pd
import numpy as np

left = pd.DataFrame({'a': np.arange(10, 11, .05)})
right = pd.DataFrame({'a': np.arange(10,11,.1), 'b': np.random.random_sample((10,))})
尝试合并这些我得到:

pd.merge(left, right, how='left', on='a')

Out[182]: 
        a         b
0   10.00  0.913439
1   10.05       NaN
2   10.10       NaN
3   10.15       NaN
4   10.20       NaN
5   10.25       NaN
6   10.30       NaN
7   10.35       NaN
8   10.40       NaN
9   10.45       NaN
10  10.50       NaN
11  10.55       NaN
12  10.60       NaN
13  10.65       NaN
14  10.70       NaN
15  10.75       NaN
16  10.80       NaN
17  10.85       NaN
18  10.90       NaN
19  10.95       NaN

但是,如果我重新设置“a”列的格式,我会得到所需的结果:

left.a = left.a.map(lambda x : format(x,'.2f'))
right.a = right.a.map(lambda x : format(x,'.2f'))

pd.merge(left, right, how='left', on='a')

Out[184]: 
        a         b
0   10.00  0.913439
1   10.05       NaN
2   10.10  0.468474
3   10.15       NaN
4   10.20  0.969810
5   10.25       NaN
6   10.30  0.304893
7   10.35       NaN
8   10.40  0.375873
9   10.45       NaN
10  10.50  0.639368
11  10.55       NaN
12  10.60  0.723442
13  10.65       NaN
14  10.70  0.916725
15  10.75       NaN
16  10.80  0.366827
17  10.85       NaN
18  10.90  0.664318
19  10.95       NaN

我想知道是否有人能解释为什么会发生这种情况,如果有比我的地图更简单的解决方案,请格式化lambda。

您可以使用


它将执行左合并,您可以设置一个公差值。

太完美了!非常感谢。
pd.merge_asof(left, right, on='a', tolerance = 0.01)