Как выбрать топ 100 из каждой группы в столбце? - PullRequest
0 голосов
/ 29 сентября 2019

выберите лучшие значения N из каждой группы в столбце данных

dataframe needed

Ответы [ 2 ]

2 голосов
/ 29 сентября 2019

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

В коде:

df1['rn'] = df1.groupby('year')['rank'].rank(ascending=False)
result_df = df1[df1['rn'] <= 2].drop('rn', axis=1)

Что дает желаемый результат:

   year  rank   name
0  1999     5    ria
1  1999     3    kay
3  2000     4    ria
4  2000     2  manny

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

1 голос
/ 29 сентября 2019

Вы можете сгруппировать year и взять первые две строки в каждой группе с помощью head(2):

df1.groupby('year').head(2)

#    year  rank   name                                      
# 0  1999     5    ria                                        
# 1  1999     3    kay                                        
# 3  2000     4    ria                                        
# 4  2000     2  manny                 

Обратите внимание, что для несортированных данных может потребоваться сортировка перед группировкой, например

df1.sort_values(['year', 'rank'], ascending=[True, False]).groupby('year').head(2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...