Ранжирование по нескольким столбцам, группировка по другому столбцу - PullRequest
1 голос
/ 23 октября 2019

Я пытаюсь ранжировать группу данных по ключевому столбцу по значению 2 разных столбцов.

Каждая строка представляет маршрут с данным ключом. Разные маршруты могут использовать один и тот же ключ. Каждый маршрут имеет количество касаний и общее время. Я хочу ранжировать по прикосновениям и по общему времени, если касания совпадают.

Учитывая следующий фрейм данных

    route   key touches total_tt
0   R1  key1    1   10
1   R2  key1    2   20
2   R3  key1    2   23
3   R4  key1    3   20
4   R5  key1    3   20
5   R6  key1    3   30
6   R7  key2    3   30

Я бы ожидал следующий рейтинг

    route   key touches total_tt    rank
0   R1  key1    1   10  1
1   R2  key1    2   20  2
2   R3  key1    2   23  3
3   R4  key1    3   20  4
4   R5  key1    3   20  4
5   R6  key1    3   30  5
6   R7  key2    3   30  1

1 Ответ

1 голос
/ 23 октября 2019

sort и groupby + ngroup для обозначения каждой группы вашим рейтингом. Вычитая минимальный ранг в каждом 'key', можно получить желаемый ранг в группе.

cols = ['key', 'touches', 'total_tt']

df['rank'] = df.sort_values(cols).groupby(cols, sort=False).ngroup()
df['rank'] = df['rank'] - df.groupby('key')['rank'].transform('min') + 1

Вывод:

  route   key  touches  total_tt  rank
0    R1  key1        1        10     1
1    R2  key1        2        20     2
2    R3  key1        2        23     3
3    R4  key1        3        20     4
4    R5  key1        3        20     4
5    R6  key1        3        30     5
6    R7  key2        3        30     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...