Ранжирование Пандас DataFrame на основе близости к указанному значению - PullRequest
0 голосов
/ 26 декабря 2018

Извинения, если это тривиальная задача.Я очень новичок в программировании и Python и учусь как часть моей диссертации.

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

Я работаю над тем, чтобы сравнить маршруты бега / велосипеда.В рамках этого процесса я пытаюсь найти сравнение маршрута запроса с целевым маршрутом на основе нескольких различных атрибутов: расстояния, усиления по высоте, потери по высоте и градиента.Мой результирующий фрейм данных показывает ошибку между двумя маршрутами в каждом атрибуте в сравнении (т. Е. [Значение целевого маршрута - значение маршрута запроса] / значение целевого маршрута).Проблема, с которой я сейчас сталкиваюсь, заключается в ранжировании этих результатов.Поскольку идеальным соответствием будет значение 0, я хочу ранжировать значения на основе их близости к этому.

Кадр данных для ранжирования:

scores = pd.DataFrame({'distance':[0.15, 0.07, -0.09, 0], 'elevation_gain': 
        [-0.19,-8.39, -0.86, 0],'elevation_loss':[-3.73, -2.51, -0.16, 0], 
        'gradient': [0.12, 0.39, 2.77, 0]})

В этом случае4-й маршрут - это маршрут запроса, так как в результате получается идеальное совпадение, и поэтому он должен занимать 1-е место.
Поскольку существуют отрицательные значения, я не думаю, что будет подходящим нисходящий рейтинг.

я стремлюсь к следующему:

ranks = pd.DataFrame({'distance':[4, 2, 3, 1], 'elevation_gain': [2,4, 3, 
      1],'elevation_loss':[4, 3, 2, 1], 'gradient': [2, 3, 4, 1]})

(Извинения, я не знаю, как визуализировать эти фреймы данных, чтобы их было легче переварить)

Затем я мог бы создать новый столбецсуммирование рангов и наименьшее количество баллов указывает на лучшее совпадение.

Спасибо за любую помощь заранее!

1 Ответ

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

Попробуйте это:

ranks = scores.abs().apply(pd.Series.rank).astype(int)
ranks 

Вывод:

   distance  elevation_gain  elevation_loss  gradient
0         4               2               4         2
1         2               4               3         3
2         3               3               2         4
3         1               1               1         1
...