Сравните значения с плавающей точкой в ​​одном столбце со всеми другими столбцами в панде DataFrame - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть фрейм данных с несколькими столбцами, содержащими значения с плавающей точкой.

df = pd.DataFrame({
        "v0": [0.493864,0.378362,0.342887,0.308959,0.746347], 
        "v1":[0.018915,0.018535,0.019587,0.035702,0.008325],
        "v2":[0.252000,0.066746,0.092421,0.036694,0.036506],
        "v3":[0.091409,0.103887,0.098669,0.112207,0.043911],
        "v4":[0.058429,0.312115,0.342887,0.305678,0.103065],
        "v5":[0.493864,0.378362,0.338524,0.304545,0.746347]})

Мне нужно создать другой результат столбца в df, сравнивая значение каждой строки в df['v0'] со значением строк в последующих столбцахv1-v5.

Что мне нужно, как показано ниже: v0 v1 v2 v3 v4 v5 Result 0 0.493864 0.018915 0.252000 0.091409 0.058429 0.493864 1 1 0.378362 0.018535 0.066746 0.103887 0.312115 0.378362 1 2 0.342887 0.019587 0.092421 0.098669 0.342887 0.338524 1 3 0.308959 0.035702 0.036694 0.112207 0.305678 0.304545 0 4 0.746347 0.008325 0.036506 0.043911 0.103065 0.746347 1

Я пробовал много подходов, включая Эта ссылка и Эта ссылка

Но, похоже, задача, которую я требую, не выполнима.Я боролся с этим с прошлой пары дней.Исходный набор данных у меня более 60000 строк.Пожалуйста, предложите лучший и быстрый способ

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Для всех проблема была отсортирована.Спасибо всем тем, кто нашел время и ответил мне.Будучи программистом-любителем, было очень приятно видеть, что моя проблема получает ответ.Окончательное решение получено, как показано ниже, благодаря @ coldspeed

СКРИНШОТ JOBYTER NOTEBOOK

0 голосов
/ 24 декабря 2018

Лучшее решение для сравнения с плавающей запятой - использовать np.isclose с широковещательной передачей:

df['Result'] = np.isclose(v[:,1:], v[:,[0]]).any(1).astype(int)
df
         v0        v1        v2        v3        v4        v5  Result
0  0.493864  0.018915  0.252000  0.091409  0.058429  0.493864       1
1  0.378362  0.018535  0.066746  0.103887  0.312115  0.378362       1
2  0.342887  0.019587  0.092421  0.098669  0.342887  0.338524       1
3  0.308959  0.035702  0.036694  0.112207  0.305678  0.304545       0
4  0.746347  0.008325  0.036506  0.043911  0.103065  0.746347       1

Делать НЕ использовать сравнения на основе равенства при работе с числами с плавающей точкой из-за возможностинеточностей с плавающей точкой.См. Не работает ли математика с плавающей запятой?

...