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
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()
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:
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.