Как сравнить два кадра данных с разными уровнями точности в одном столбце - PullRequest
0 голосов
/ 04 мая 2019

Я создаю базу данных результатов, сравнивая df_one с df_two с кодом ниже.

df_results = pd.DataFrame(df_one.eq(db_two))

Это прекрасно работает, но один из столбцов в df_one имеет число с плавающей запятой с уровнем точности 9, а другой - с уровнем точности 12. Я хочу, чтобы тест вернул true, если первые 9 чисел после десятичной дроби равны, даже если последние 3 не являются.

Итак, я сравниваю что-то вроде двух значений ниже.

Column One              Column Two
------------------      ------------------
42.123456789            42.123456789012

Я знаю, что могу изменить уровень точности дисплея с помощью настройки set_option.

pd.set_option("precision", 9)

К сожалению, это только для отображения, поэтому оно не влияет на сравнение, выполняемое функцией eq.

Любая помощь приветствуется заранее.

1 Ответ

1 голос
/ 04 мая 2019

Как говорит @ duncster94, попробуйте:

>>> import pandas as pd
>>> df = pd.DataFrame([[42.123456789,42.123456789012]], columns=list('AB'))
>>> df[df.A==round(df.B, 10)]
           A          B
0  42.123457  42.123457
>>>

Или вы можете даже использовать math.isclose

>>> import pandas as pd
>>> from math import isclose
>>> df = pd.DataFrame([[42.123456789,42.123456789012]], columns=list('AB'))
>>> df[df.apply(lambda row: isclose(row.A, row.B, rel_tol=1e-12), axis=1)]
           A          B
0  42.123457  42.123457
>>> df[df.apply(lambda row: isclose(row.A, row.B, rel_tol=1e-13),axis=1)]
Empty DataFrame
Columns: [A, B]
Index: []
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...