Сортировать объект GroupBy по определенному макс.значение в отдельных группах - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь отсортировать свой групповой объект по наибольшему значению за определенный год - то есть значения 2018 года.Однако безуспешно.
Код :

aggs = {'sales':'sum')
df.groupby(by=['segment', 'year'].agg(aggs)

Результат по умолчанию по пандам при группировании
(отсортировано в алфавитном порядке по уровню 0, затем по возрастанию по уровню 1)

Segment Year Sales  
A 2016 2  
A 2017 10  
A 2018 6  
B 2016 1  
B 2017 4  
B 2018 8

Ожидаемый результат:

Segment Year Sales  
B 2016 1  
B 2017 4  
B 2018 8  
A 2016 2  
A 2017 10  
A 2018 6

т.е. A сортируется за B, потому что сумма B в 2018 году равна 8, а для A - 6.

1 Ответ

0 голосов
/ 01 февраля 2019

Идея заключается в создании упорядоченного Categorical с категориями по отфильтрованным значениям с 2018 и сортировке по Sales:

cats = df[df['Year'] == 2018].sort_values('Sales', ascending=False)['Segment']

aggs = {'Sales':'sum'}
df['Segment'] = pd.Categorical(df['Segment'], ordered=True, categories=cats)
df1 = df.groupby(by=['Segment', 'Year']).agg(aggs)

print (df1)
              Sales
Segment Year       
B       2016      1
        2017      4
        2018      8
A       2016      2
        2017     10
        2018      6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...