Group by – Funciones de agregación en Pandas

group by pandas

En un post anterior hablamos de qué es Pandas y cómo podíamos utilizar sus funciones básicas para trabajar con datos. Estos usos sencillos están muy bien, pero ¿qué pasa cuando quieres ir un paso más allá? Seguro que en algún momento vas a querer saber cuál es la media de una columna, o cuánto suman todos sus valores. Si este es tu problema, te explico cómo hacer esto con la función group by de Pandas.

Qué son datos agregados

Si has trabajado alguna vez con Excel, ya tienes la noción de trabajar con datos en tablas. Donde una tabla es una serie de filas, donde cada fila tiene el mismo número de columnas. Imagínate que en tu caso, tienes una tabla de con datos de ventas de una tienda de ropa. Tenemos una fila por cada compra que ha hecho un cliente y una columna que representa lo que el cliente gastó en esa venta.

Está muy bien tener datos individuales, pero qué pasa si viene tu jefe y te pregunta ¿cuánto gastaron todos los clientes en un día? En este caso tendrías que sumar todos las filas de ventas… Con esto usarías los datos de todos los clientes para generar un sólo número. Esto es una agregación. Aquí has agregado los datos de los clientes para obtener el gasto total.

Qué es una función de agregación

Hay muchas formas en las que puedes agregar datos. El más típico es la suma, pero también puedes calcular la media, mediana, moda, etc. Estas últimas seguramente te suenen, ya que se utilizan mucho en estadística para describir datos de una variable, ya que nos ayuda a saber cómo se comporta.

Ejemplos de group by en Pandas

Todo esto está muy bien, pero seguro que quieres ver un poco de código ¿no? Vamos a pensar en el caso de un e-Commerce (una tienda digital), tenemos datos de 4 usuarios, con la fecha en la que entraron, su nombre, el tiempo de sesión en minutos (cuánto tiempo estuvieron en la tienda) y lo que gastaron cuando compraron.

import pandas as pd
df = pd.DataFrame({
    'dia': ['2023-02-22', '2023-02-22', '2023-02-22', '2023-02-22', '2023-02-23', '2023-02-23', '2023-02-23', '2023-02-23'],
    'nombre': ['Juan', 'Pepe', 'Carla', 'Cristina', 'Juan', 'Pepe', 'Carla', 'Cristina'],
    'tiempo_sesion': [10, 32, 7, 15, 2, 5, 6, 7],
    'gasto_total': [20, 39.99, 56.78, 14.24, 14.99, 25.67, 35.17, 8.95]
})
print(df.head(8))

Agregando datos de variables individuales

Puedes agregar los datos por cada variable individual.

print(df.gasto_total.sum())

Agregando datos por dimensión

También puedes agregar datos por una dimensión. ¿Qué es una dimensión? Básicamente es el valor por el que quieres poder analizar unos datos. En este caso, puedes agregar los datos por fecha:

print(df.groupby('dia').sum())

O por nombre:

print(df.groupby('nombre').sum())

Este conjunto de datos no tiene más dimensiones, pero si las tuvieras, podrías utilizarlas para hacer otro tipo de análisis de los datos.

Tipos de agregación en Pandas

sum

Calcular la suma de una variable.

print(df.gasto_total.sum())

count

Número de registros de la variable.

print(df.gasto_total.count())

mean

Media de la variable.

print(df.gasto_total.mean())

min

Valor mínimo de la variable.

print(df.gasto_total.min())

max

Valor máximo de la variable.

print(df.gasto_total.max())

Utilizando agg para agregar DataFrames

Pandas proporciona una forma muy potente de agregar columnas de una forma personalizada, para no solo indicar el nombre de la columna agregada, sino además indicar cómo quieres agregar cada columna. Esto se hace con el método agg.

df_agg = df.groupby('dia').agg(
    total=('gasto_total', sum),
    media=('gasto_total', np.mean))

Conclusiones

En este post has aprendido qué es agregar datos y cómo lo puedes utilizar en Pandas. Espero que te haya resultado útil. Si tienes cualquier duda, déjala en los comentarios.

¡Gracias por haberte pasado por aquí!