Quiero agrupar mi marco de datos por dos columnas y luego ordenar los resultados agregados dentro de los 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
Ahora me gustaría ordenar la columna de conteo en orden descendente dentro de cada uno de los grupos. Y luego toma solo las tres primeras filas. Para obtener algo como:
count
job source
market A 5
D 4
B 3
sales E 7
C 6
B 4
order
es un uso obsoleto en susort_values
lugarTambién puede hacerlo de una vez, haciendo primero la clasificación y usando la cabeza para tomar los primeros 3 de cada grupo.
fuente
groupby
Garantiza que se conserva el pedido?Aquí hay otro ejemplo de tomar los 3 primeros en orden ordenado y ordenar dentro de los grupos:
fuente
Intenta esto en su lugar
manera simple de hacer 'groupby' y ordenar en orden descendente
fuente
Si no necesita sumar una columna, use la respuesta de @ tvashtar. Si necesita sumar, entonces puede usar la respuesta de @joris o esta que es muy similar.
fuente