Выберите 10 лучших записей для каждой категории Python - PullRequest
0 голосов
/ 02 марта 2019

Как мне сгруппировать столбец и получить 10 лучших записей в каждой категории в этом столбце?

В столбце, который я хочу сгруппировать, есть 3 категории: «высокий», «средний» и «низкий».

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

Вот заголовок моего фрейма данных:

country   designation     points    province               title             year    price   price_category
Italy     Vulkà Bianco     98        Sicily     Nicosia 2013 Vulkà Bianco    2013     65     high

Мой код здесь возвращает верхние 2 из числового столбца, но я теряю все остальные столбцы.Есть ли способ сделать это без потери других столбцов?

df.groupby('price_category')['points'].nlargest(2)

Вот мой вывод, что я потерял все остальные столбцы:

category_column        
high        36528     100
            42197     100
low         5011       95
            15196      95
med         114981     97
            9901       96

Мне нужно это ^, но безпотерять мои другие столбцы.

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Вам нужно:

df = pd.DataFrame({'id':[1,2,3,4,5,6,7,8,9,10,11,12], 
                   'level':['low','high','low','medium','medium','high','low','high','medium','high','medium','low'],
                   'values':[23,43,56,12,34,32,18,109,345,21,15,45]})

# use nlargest(10) for your problem. 
print(df.groupby('level')['values'].nlargest(2))

Вывод:

level                                                                                                                                         
high    7     109                                                                                                                             
        1      43                                                                                                                             
low     2      56                                                                                                                             
        11     45                                                                                                                             
medium  8     345                                                                                                                             
        4      34   
0 голосов
/ 02 марта 2019

Об этом спрашивали раньше и отвечали здесь в стеке pandas groupby sort внутри групп .Что вам нужно сделать, так это создать фрейм группировки данных и создать столбец с суммой агрегации.Теперь создайте вторую группу в новом столбце агрегации.Затем используйте .nlargest, как указано в посте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...