如何合并浮动数据帧?

时间:2019-08-02 21:09:03

标签: 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,))})

尝试合并这些,我得到:

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。

1 个答案:

答案 0 :(得分:1)

您可以使用pd.merge_asof

pd.merge_asof(left, right, on='a', tolerance = 0.01)

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