Как получить верхние n значений из столбцов фрейма данных? - PullRequest
1 голос
/ 01 августа 2020

У меня есть фрейм данных, как показано ниже

import pandas as pd 
df = pd.DataFrame(
  {
    'rating': [5.0,4.5,3.0,2.5,4.0,4.5,5.0,3.0],
    'productname': ['s','v','r','n','k','a','q','w'],
    'category': [ 
      'mobile',
      'mobile',
      'mobile',
      'mobile',
      'laptop',
      'laptop',
      'laptop',
      'laptop'
    ]
  }
)

Я могу получить продукт с наивысшим рейтингом по приведенному ниже коду:

df.loc[df.groupby('category')['rating'].idxmax(), :].reset_index()

Мой вопрос в том, как получить 3 лучших товаров в каждой категории?

Ответы [ 3 ]

0 голосов
/ 01 августа 2020

Используйте df.nlargest:

>>> df
   rating productname category
0     5.0           s   mobile
1     4.5           v   mobile
2     3.0           r   mobile
3     2.5           n   mobile
4     4.0           k   laptop
5     4.5           a   laptop
6     5.0           q   laptop
7     3.0           w   laptop

>>> df.nlargest(3, 'rating')

   rating productname category
0     5.0           s   mobile
6     5.0           q   laptop
1     4.5           v   mobile

>>> df.nlargest(3, 'rating')['productname']

0    s
6    q
1    v
Name: productname, dtype: object

Если вы хотите, чтобы топ-3 для каждой категории:

>>> df.groupby('category').apply(lambda x:x.nlargest(3, 'rating').drop('category',1))
  
            rating productname
category                      
laptop   6     5.0           q
         5     4.5           a
         4     4.0           k
mobile   0     5.0           s
         1     4.5           v
         2     3.0           r
0 голосов
/ 01 августа 2020

Для этого можно использовать nlargest (сортировка не требуется) -

df.groupby(['category']).apply(lambda x:x.nlargest(3, 'rating'))
            rating productname category
category                               
laptop   6     5.0           q   laptop
         5     4.5           a   laptop
         4     4.0           k   laptop
mobile   0     5.0           s   mobile
         1     4.5           v   mobile
         2     3.0           r   mobile
0 голосов
/ 01 августа 2020

добавить тег заголовка после вашего DataFrame с обязательными (n) записями.

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