¿Cómo agrupar y clasificar por múltiples columnas en pandas?

Para clasificar filas en un grupo por objeto pandas, use el siguiente método:

your_df.groupby('your_col')['your_variable_col].rank()

Crear marco de datos de ejemplo

Comenzaremos importando la biblioteca pandas a nuestro entorno de desarrollo de Python y construyendo un DataFrame muy simple.

import pandas as pd  month = ['March', 'March', 'June', 'October', 'March', 'June'] office = ['Hong Kong', 'Toronto', 'Paris', 'Paris', 'Osaka', 'Paris'] interviews = [195, 225, 186, 180, 185, 156] hiring_data = dict(month = month, office = office, interviews = interviews) hiring = pd.DataFrame(data=hiring_data) 

Aquí están nuestras filas de DataFrame:

hiring
mesoficinaentrevistas0

1

2

3

4

5

Marzo Hong Kong 195
Marzo toronto 225
Junio París 186
Octubre París 180
Marzo osaka 185
Junio París 156

Agregar y clasificar dentro de un grupo

En este primer ejemplo, nos gustaría agregar nuestros datos por mes y luego clasificar los valores dentro de cada grupo por el número de entrevistas.

Primero, veamos cuántos registros se han agregado en cada grupo.

hiring.groupby('month')['interviews'].size().reset_index()
mesentrevistas0

1

2

Junio 2
Marzo 3
Octubre 1

Clasificar cada uno de los registros es fácil. Pandas devuelve una Serie que muestra el rango de cada registro en su grupo.

relative_rank = hiring.groupby('month')['interviews'].rank(ascending= False)

Podemos asignar la Serie al Dataframe como una nueva columna:

hiring.assign(relative_rank = relative_rank )

Aquí está nuestro marco de datos:

mesoficinaentrevistasclasificación_relativa0

1

2

3

4

5

Marzo Hong Kong 195 2.0
Marzo toronto 225 1.0
Junio París 186 1.0
Octubre París 180 1.0
Marzo osaka 185 3.0
Junio París 156 2.0

Agrupar por varias columnas y clasificar

De la misma manera, podemos agregar nuestro DataFrame por varias columnas y determinar la clasificación relativa:

hiring.groupby(['month', 'office'])['interviews'].rank(ascending= False)

Como se muestra arriba, el método de rango devuelve una Serie pandas.