Панды: Группировка по двум параметрам и сортировка по третьему параметру - PullRequest
2 голосов
/ 21 октября 2019

Я хочу сгруппировать свой фрейм данных по двум столбцам (Имя и бюджет), а затем отсортировать агрегированные результаты по третьему параметру (Prio).

Name     Budget    Prio    Quantity
peter    A         2       12
         B         1       123
joe      A         3       34
         B         1       51
         C         2       43

Я уже проверил эту запись , что было очень полезно и привело к следующему выводу. Однако я не могу управлять сортировкой по третьему параметру (Prio).

df_agg = df.groupby(['Name','Budget','Prio']).agg({'Quantity':sum})

g = df_agg['Quantity'].groupby(level=0, group_keys=False)

res = g.apply(lambda x: x.sort_values(ascending=True))

Теперь я хотел бы отсортировать prio в порядке возрастания внутри каждой из групп. Чтобы получить что-то вроде:

Name     Budget    Prio    Quantity
peter    B         1       123
         A         2       12
joe      B         1       51
         C         2       34
         A         3       43

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Если вы хотите отсортировать только по Prio, вы можете использовать sort_index:

(df.groupby(['Name','Budget','Prio'])
   .agg({'Quantity':'sum'})
   .sort_index(level=['Name', 'Prio'],
                ascending=[False, True])
)

Вывод:

                   Quantity
Name  Budget Prio          
peter B      1          123
      A      2           12
joe   B      1           51
      C      2           43
      A      3           34
1 голос
/ 21 октября 2019

IIUC,

df.groupby(['Name','Budget','Prio']).agg({'Quantity':sum}).sort_values(['Name','Prio'])

Выход:

                   Quantity
Name  Budget Prio          
joe   B      1           51
      C      2            4
      A      3           34
peter B      1          123
      A      2           12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...