Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Comparing floats in a pandas column

I have the following dataframe:

       actual_credit    min_required_credit    0   0.3              0.4    1   0.5              0.2    2   0.4              0.4    3   0.2              0.3 

I need to add a column indicating where actual_credit >= min_required_credit. The result would be:

       actual_credit    min_required_credit   result    0   0.3              0.4                   False    1   0.5              0.2                   True    2   0.4              0.4                   True    3   0.1              0.3                   False 

I am doing the following:

df['result'] = abs(df['actual_credit']) >= abs(df['min_required_credit']) 

However the 3rd row (0.4 and 0.4) is constantly resulting in False. After researching this issue at various places including: What is the best way to compare floats for almost-equality in Python? I still can't get this to work. Whenever the two columns have an identical value, the result is False which is not correct.

I am using python 3.3

like image 815
darkpool Avatar asked Nov 10 '15 09:11

darkpool


People also ask

How do you compare two floats in Python?

How To Compare Floats in Python. If abs(a - b) is smaller than some percentage of the larger of a or b , then a is considered sufficiently close to b to be "equal" to b . This percentage is called the relative tolerance. You can specify the relative tolerance with the rel_tol keyword argument of math.

How do you compare two floats?

To compare two floating point or double values, we have to consider the precision in to the comparison. For example, if two numbers are 3.1428 and 3.1415, then they are same up to the precision 0.01, but after that, like 0.001 they are not same.

Can we use == to compare two float values in Python?

In the case of floating-point numbers, the relational operator (==) does not produce correct output, this is due to the internal precision errors in rounding up floating-point numbers. In the above example, we can see the inaccuracy in comparing two floating-point numbers using “==” operator.


1 Answers

Due to imprecise float comparison you can or your comparison with np.isclose, isclose takes a relative and absolute tolerance param so the following should work:

df['result'] = df['actual_credit'].ge(df['min_required_credit']) | np.isclose(df['actual_credit'], df['min_required_credit']) 
like image 86
EdChum Avatar answered Sep 30 '22 07:09

EdChum