Recuento de pandas por grupos

Suraj Joshi 30 enero 2023
  1. Recuento de los valores únicos de las filas utilizando el método Series.value_counts()
  2. Contar los valores de los grupos de DataFrame utilizando la función DataFrame.groupby()
  3. Obtener múltiples valores estadísticos de cada grupo usando el método pandas.DataFrame.agg()
Recuento de pandas por grupos

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 avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Artículo relacionado - Pandas Groupby