Quero agrupar meu quadro de dados por duas colunas e classificar os resultados agregados dentro dos grupos.
In [167]:
df
Out[167]:
count job source
0 2 sales A
1 4 sales B
2 6 sales C
3 3 sales D
4 7 sales E
5 5 market A
6 3 market B
7 2 market C
8 4 market D
9 1 market E
In [168]:
df.groupby(['job','source']).agg({'count':sum})
Out[168]:
count
job source
market A 5
B 3
C 2
D 4
E 1
sales A 2
B 4
C 6
D 3
E 7
Gostaria agora de classificar a coluna de contagem em ordem decrescente dentro de cada um dos grupos. E depois pegue apenas as três primeiras linhas. Para obter algo como:
count
job source
market A 5
D 4
B 3
sales E 7
C 6
B 4
order
é obsoleto usosort_values
em vezVocê também pode fazê-lo de uma só vez, fazendo a classificação primeiro e usando a cabeça para tirar os 3 primeiros de cada grupo.
fonte
groupby
garante que a ordem é preservada?Aqui está outro exemplo de como classificar os 3 primeiros na ordem de classificação e classificar dentro dos grupos:
fonte
Tente isso em vez disso
maneira simples de fazer 'agrupar' e classificar em ordem decrescente
fonte
Se você não precisar somar uma coluna, use a resposta de @ tvashtar. Se você precisar somar, pode usar a resposta do @joris 'ou esta que é muito semelhante a ela.
fonte