Merge pandas DataFrame in float value column

I have two frames of data that I am trying to combine.

Dataframe A:

    col1    col2    sub    grade
0   1       34.32   x       a 
1   1       34.32   x       b
2   1       34.33   y       c
3   2       10.14   z       b
4   3       33.01   z       a

Dataframe B:

    col1    col2    group   ID
0   1       34.32   t       z 
1   1       54.32   s       w
2   1       34.33   r       z
3   2       10.14   q       z
4   3       33.01   q       e

I want to merge into col1 and col2. I was pd.merge with the following syntax:

pd.merge(A, B, how = 'outer', on = ['col1', 'col2'])

However, I think I ran into problems with float col2 values ​​as many lines are discarded. Is there a way to use np.isclose to match col2 values? When I refer to the index of a specific col2 value in any data frame, the value has much more decimal places than what is displayed in the data frame.

I would like to get the result:

    col1   col2   sub   grade   group    ID
0   1      34.32  x     a       t        z
1   1      34.32  x     b       s        w
2   1      54.32  s     w       NaN      NaN
3   1      34.33  y     c       r        z
4   2      10.14  z     b       q        z
5   3      33.01  z     a       q        e
+4
source share
1 answer

, 100, 1000..., int, merge :

N = 100
#thank you koalo for comment
A.col2 = np.round(A.col2*N).astype(int) 
B.col2 = np.round(B.col2*N).astype(int) 
df = pd.merge(A, B, how = 'outer', on = ['col1', 'col2'])
df.col2 = df.col2 / N
print (df)
   col1   col2  sub grade group ID
0     1  34.32    x     a     t  z
1     1  34.32    x     b     t  z
2     1  34.33    y     c     r  z
3     2  10.14    z     b     q  z
4     3  33.01    z     a     q  e
5     1  54.32  NaN   NaN     s  w
+4

Source: https://habr.com/ru/post/1663702/


All Articles