Recuento de pandas por grupos
-
Recuento de los valores únicos de las filas utilizando el método
Series.value_counts()
-
Contar los valores de los grupos de DataFrame utilizando la función
DataFrame.groupby()
-
Obtener múltiples valores estadísticos de cada grupo usando el método
pandas.DataFrame.agg()
Este tutorial explica cómo podemos obtener estadísticas como count
, sum
, max
y mucho más para grupos derivados usando el método DataFrame.groupby()
.
Utilizaremos el automobile_data_df
mostrado en el ejemplo anterior para explicar los conceptos. El DataFrame está formado por los empleados y las marcas de coches y motos que utilizan.
import pandas as pd
automobile_data = [
["Chevrolet", "Yamaha"],
["Toyota", "Ducati"],
["Volkswagen", "BMW"],
["Cherlovet", "Kawasaki"],
["Toyota", "Ducati"],
["Toyota", "BMW"],
["Volkswagen", "BMW"],
]
column_names = ["Car Brand", "Motorbike Brand"]
index_names = ["Steven", "Robert", "Jimmy", "Mike", "Phoenix", "Scott", "John"]
automobile_data_df = pd.DataFrame(
automobile_data, index=index_names, columns=column_names
)
print(automobile_data_df)
Producción :
Car Brand Motorbike Brand
Steven Chevrolet Yamaha
Robert Toyota Ducati
Jimmy Volkswagen BMW
Mike Cherlovet Kawasaki
Phoenix Toyota Ducati
Scott Toyota BMW
John Volkswagen BMW
Recuento de los valores únicos de las filas utilizando el método Series.value_counts()
Si queremos contar cada valor único de una sola columna en un DataFrame, podemos utilizar el método Series.value_counts()
.
import pandas as pd
automobile_data = [
["Chevrolet", "Yamaha"],
["Toyota", "Ducati"],
["Volkswagen", "BMW"],
["Cherlovet", "Kawasaki"],
["Toyota", "Ducati"],
["Toyota", "BMW"],
["Volkswagen", "BMW"],
]
column_names = ["Car Brand", "Motorbike Brand"]
index_names = ["Steven", "Robert", "Jimmy", "Mike", "Phoenix", "Scott", "John"]
automobile_data_df = pd.DataFrame(
automobile_data, index=index_names, columns=column_names
)
print(automobile_data_df["Car Brand"].value_counts())
Producción :
Toyota 3
Volkswagen 2
Cherlovet 1
Chevrolet 1
Name: Car Brand, dtype: int64
Se imprimirán todos los valores únicos de la columna Car Brand
del automobile_data_df
junto con sus recuentos. El método sólo es aplicable si queremos ver los recuentos de valores de una sola columna a la vez.
Contar los valores de los grupos de DataFrame utilizando la función DataFrame.groupby()
Usamos la función DataFrame.groupby()
para dividir un DataFrame en múltiples grupos y luego usamos el método size()
para contar los valores de cada grupo creado.
import pandas as pd
automobile_data = [
["Chevrolet", "Yamaha"],
["Toyota", "Ducati"],
["Volkswagen", "BMW"],
["Cherlovet", "Kawasaki"],
["Toyota", "Ducati"],
["Toyota", "BMW"],
["Volkswagen", "BMW"],
]
column_names = ["Car Brand", "Motorbike Brand"]
index_names = ["Steven", "Robert", "Jimmy", "Mike", "Phoenix", "Scott", "John"]
automobile_data_df = pd.DataFrame(
automobile_data, index=index_names, columns=column_names
)
group = automobile_data_df.groupby(["Car Brand", "Motorbike Brand"])
print(group.size().reset_index(name="counts"))
Producción :
Car Brand Motorbike Brand counts
0 Cherlovet Kawasaki 1
1 Chevrolet Yamaha 1
2 Toyota BMW 1
3 Toyota Ducati 2
4 Volkswagen BMW 2
Imprime un DatFrame con todas las combinaciones únicas de valores de las columnas Marca de coche
y Motorbike Brand
del automobile_data_df
junto con el recuento de ocurrencias de estas combinaciones en el DataFrame automobile_data_df
.
El método groupby()
divide el automobile_data_df
en grupos. Las filas con los mismos valores de las columnas Car Brand
y Motorbike Brand
se colocarán en el mismo grupo. El método size()
nos dará el recuento de valores en cada grupo y finalmente generamos el DataFrame a partir del recuento de valores en cada grupo.
Obtener múltiples valores estadísticos de cada grupo usando el método pandas.DataFrame.agg()
import pandas as pd
automobile_data = [
["Chevrolet", "Yamaha", 4000],
["Toyota", "Ducati", 5000],
["Volkswagen", "BMW", 4500],
["Cherlovet", "Kawasaki", 3800],
["Toyota", "Ducati", 4500],
["Toyota", "BMW", 5000],
["Volkswagen", "BMW", 6000],
]
column_names = ["Car Brand", "Motorbike Brand", "Monthly Salary"]
index_names = ["Steven", "Robert", "Jimmy", "Mike", "Phoenix", "Scott", "John"]
automobile_data_df = pd.DataFrame(
automobile_data, index=index_names, columns=column_names
)
group = automobile_data_df.groupby(["Car Brand", "Motorbike Brand"])
print(group.agg({"Monthly Salary": [min, max, sum]}))
Producción :
Monthly Salary
min max sum
Car Brand Motorbike Brand
Cherlovet Kawasaki 3800 3800 3800
Chevrolet Yamaha 4000 4000 4000
Toyota BMW 5000 5000 5000
Ducati 4500 5000 9500
Volkswagen BMW 4500 6000 10500
Muestra el mínimo, el máximo y la suma de los valores del Monthly Salary
para cada grupo generado.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn