получить лучшие n строк на группу панд - PullRequest
2 голосов
/ 12 июня 2019

Я пытался использовать groupby с пандами, но, будучи довольно новым для python, я не могу найти решение

raw_data = {'Products': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'C'], 
        'Month': ['201903', '201903', '201902', '201901', '201902', '201901', '201902', '201904','201903', '201902', '201904', '201903'], 
        'Sales': [4, 24, 31, 2, 3, 4, 24, 31, 2, 3, 2, 3]}
df = pd.DataFrame(raw_data, columns = ['Products', 'Month', 'Sales'])
df

данные выглядят так

Products    Month   Sales
0   A           201903  4
1   A           201903  24
2   A           201902  31
3   A           201901  2
4   B           201902  3
5   B           201901  4
6   B           201902  24
7   C           201904  31
8   C           201903  2
9   C           201902  3
10  C           201904  2
11  C           201903  3

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

Products    Months  Sales
A           201902  31
A           201903  28
B           201901  4
B           201902  27
C           201903  5
C           201904  33

Прошу прощения, если все не отформатировано правильно, все еще плохо знакомы с SO

Спасибо

1 Ответ

1 голос
/ 12 июня 2019

Это сделает это:

(df.groupby(['Products', 'Month'], as_index=False)
   .sum()
   .sort_values(['Products', 'Sales'],
                ascending=(True,False))
   .groupby('Products')
   .head(2))

  Products   Month  Sales
1        A  201902     31
2        A  201903     28
4        B  201902     27
3        B  201901      4
7        C  201904     33
6        C  201903      5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...