Je souhaite regrouper mon dataframe sur deux colonnes, puis trier les résultats agrégés au sein des groupes.
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
Je voudrais maintenant trier la colonne de comptage par ordre décroissant dans chacun des groupes. Et puis ne prenez que les trois premières rangées. Pour obtenir quelque chose comme:
count
job source
market A 5
D 4
B 3
sales E 7
C 6
B 4
order
est déconseillé à lasort_values
placeVous pouvez également le faire en une seule fois, en effectuant le tri en premier et en utilisant la tête pour prendre les 3 premiers de chaque groupe.
la source
groupby
que l'ordre est conservé?Voici un autre exemple de sélection des 3 premiers dans l'ordre trié et de tri au sein des groupes:
la source
Essayez plutôt ceci
moyen simple de faire 'groupby' et de trier par ordre décroissant
la source
Si vous n'avez pas besoin de faire la somme d'une colonne, utilisez la réponse de @ tvashtar. Si vous avez besoin de faire la somme, vous pouvez utiliser la réponse de @joris ou celle-ci qui lui est très similaire.
la source