Skip to content

[Explicado] Cómo agrupar un DataFrame en Python, Pandas, PySpark

Agrupar datos forma parte esencial del análisis de datos, ya sea para calcular agregados o aplicar transformaciones complejas. La función groupby de Pandas en Python es una herramienta robusta y versátil que te permite realizar este tipo de operaciones de manera eficiente. Con su amplia funcionalidad, agiliza el proceso de manipulación de datos agrupados en base a ciertas condiciones, haciendo del análisis de datos una tarea mucho más fluida.

La función groupby de Pandas es especialmente poderosa cuando se trata de manejar dataframes grandes, gracias a su implementación optimizada. Al aprovechar groupby del dataframe de Pandas, puedes agrupar por una o varias columnas, aplicar diversas funciones de agregado e incluso realizar tareas avanzadas como filtrar y ordenar los datos agrupados. Esta guía tiene como objetivo desentrañar el poder de la función groupby de Pandas, ofreciendo ideas, mejores prácticas y ejemplos prácticos.

¿Quieres crear rápidamente visualizaciones de datos a partir de un dataframe de Pandas en Python sin escribir código?

PyGWalker es una biblioteca de Python para Análisis Exploratorio de Datos con Visualización. PyGWalker (opens in a new tab) puede simplificar tu flujo de trabajo de análisis de datos y visualización de datos en Jupyter Notebook, convirtiendo tu dataframe de Pandas (y dataframe de polars) en una interfaz de usuario estilo Tableau para exploración visual.

PyGWalker para visualización de datos (opens in a new tab)

Entendiendo GroupBy en Pandas

En términos simples, la operación groupby en Pandas consiste en dividir los datos en grupos basados en ciertos criterios, aplicar una función a cada grupo y luego combinar los resultados. Este proceso también se conoce como estrategia de "dividir-aplicar-combinar", un término acuñado por la propia biblioteca de Pandas.

La función groupby en Pandas utiliza un concepto similar al de la sentencia SQL GROUP BY, lo que facilita la transición de SQL a Python para el análisis de datos.

Aquí tienes un ejemplo básico de cómo puedes usar groupby en un dataframe de Pandas:

import pandas as pd
 
## Crear un dataframe de ejemplo
data = {
    'Nombre': ['Juan', 'Ana', 'Juan', 'Ana', 'Juan', 'Ana'],
    'Asignatura': ['Matemáticas', 'Matemáticas', 'Física', 'Física', 'Química', 'Química'],
    'Puntuación': [85, 90, 78, 88, 92, 95]
}
 
df = pd.DataFrame(data)
 
## Aplicar groupby
agrupado = df.groupby('Nombre')
for nombre, grupo in agrupado:
    print("\n", nombre)
    print(grupo)

Agrupar por Múltiples Columnas

Además de agrupar por una sola columna, groupby en Pandas también admite agrupar por múltiples columnas. Esto es especialmente útil cuando quieres categorizar tus datos en base a múltiples atributos. Ampliemos el ejemplo anterior y realicemos una operación groupby con múltiples columnas en Pandas:

## Aplicar groupby en múltiples columnas
agrupado_multiple = df.groupby(['Nombre', 'Asignatura'])
for (nombre, asignatura), grupo in agrupado_multiple:
    print("\n", nombre, asignatura)
    print(grupo)

Como puedes ver, groupby agrupó los datos primero por 'Nombre' y luego por 'Asignatura' dentro de cada grupo de 'Nombre'. Este tipo de agrupación permite realizar operaciones de análisis de datos complejas.

Funciones de Agregado con GroupBy en Pandas

Uno de los principales beneficios de groupby en Pandas es que nos permite aplicar funciones de agregado a los datos agrupados. Las funciones de agregado comunes incluyen sum, mean, count, max y min. Veamos un ejemplo usando groupby y sum en Pandas:

## Usar sum con groupby
agrupado_suma = df.groupby('Nombre')['Puntuación'].sum()
print(agrupado_suma)

En el ejemplo, estamos sumando las puntuaciones de cada estudiante. Observa que usamos el indexador de columna (['Puntuación']) justo después de groupby. Esto se debe a que la función sum solo se puede aplicar a datos numéricos. Por lo tanto, necesitamos seleccionar la columna 'Puntuación' para aplicar la función sum.

Ordenar Datos con GroupBy en Pandas

Es común ordenar los datos después de realizar una operación groupby. Por ejemplo, es posible que desees ordenar los grupos por sus valores agregados. Así es como puedes usar groupby, sort_values y pandas:

## Ordenar datos después de groupby
agrupado_ordenado = df.groupby('Nombre')['Puntuación'].sum().sort_values(ascending=False)
print(agrupado_ordenado)

En el ejemplo, primero agrupamos el dataframe por 'Nombre', luego sumamos las 'Puntuaciones' para cada grupo y finalmente ordenamos los grupos por la suma de 'Puntuación' en orden descendente.

Agregación Personalizada con GroupBy Apply

groupby en Pandas permite la agregación personalizada mediante el uso de la función apply. Esto puede ser útil cuando las funciones de agregado incorporadas no son suficientes. Por ejemplo, supongamos que quieres calcular el rango (máximo - mínimo) de las puntuaciones para cada estudiante. Puedes usar groupby y apply en Pandas de la siguiente manera:

## Agregación personalizada con groupby apply
agrupado_apply = df.groupby('Nombre')['Puntuación'].apply(lambda x: x.max() - x.min())
print(agrupado_apply)

En este ejemplo, para cada grupo, calculamos el rango de 'Puntuación' usando una función lambda y aplicamos esta función a cada grupo con apply.

Diferencia entre GroupBy y Pivot en Pandas

Tanto groupby como la tabla dinámica (pivot table) son herramientas poderosas para resumir datos, pero sirven para propósitos diferentes y se utilizan en contextos diferentes. Para ilustrar, groupby se utiliza cuando quieres resumir tus datos en función de alguna categoría, mientras que la tabla dinámica se utiliza para remodelar tus datos.

En una operación groupby en Pandas, especificas una o más columnas para agrupar y luego especificas una función de agregado para aplicar a cada grupo. Por otro lado, una tabla dinámica toma datos simples por columna como entrada y agrupa las entradas en una tabla bidimensional que proporciona un análisis multidimensional.

GroupBy de Datos No Numéricos en Pandas

Es posible realizar un groupby en datos no numéricos en Pandas. Si bien no se pueden aplicar funciones de agregado como sum o mean a datos no numéricos, hay muchas operaciones que se pueden realizar en datos no numéricos. Por ejemplo, puedes contar el número de ocurrencias de cada categoría o aplicar cualquier función que tenga sentido para el tipo de datos de la columna no numérica.

## Groupby de datos no numéricos y conteo
agrupado_conteo = df.groupby('Nombre')['Asignatura'].count()
print(agrupado_conteo)

En este ejemplo, contamos el número de asignaturas que tiene cada estudiante al agrupar por 'Nombre' y contar 'Asignatura'.

GroupBy con PySpark

El concepto de groupby también se extiende a frameworks de big data como PySpark. Aunque la sintaxis difiere ligeramente, la idea sigue siendo la misma: dividir los datos en grupos y aplicar alguna función a cada grupo.

## GroupBy en PySpark
de pyspark.sql importar SparkSession
 
chispa = SparkSession.builder.getOrCreate()
 
## Cargar datos en un DataFrame de PySpark
df_pyspark = chispa.createDataFrame(df)
 
## GroupBy en PySpark
df_pyspark.groupby('Nombre').agg({'Puntuación': 'sum'}).show()

En PySpark, necesitas usar la función agg para aplicar una función de agregado después de la agrupación. En el ejemplo anterior, estamos agrupando por 'Nombre' y sumando la 'Puntuación' para cada grupo.

A medida que profundices en el mundo del análisis de datos con Python, descubrirás que groupby en el dataframe de Pandas es un compañero confiable. Con su flexibilidad y poder, puedes manejar y explorar datos de formas que antes solo estaban disponibles para aquellos con conocimientos en programación o estadística. Así que sumérgete, experimenta con las diferentes funcionalidades y observa cómo tus datos ofrecen información valiosa.

Preguntas frecuentes

  1. ¿Cuál es la diferencia entre groupby y pivot en Pandas?

groupby en Pandas se utiliza para resumir datos en función de una categoría, mientras que la tabla dinámica se utiliza para remodelar datos en una tabla bidimensional para análisis multidimensional.

  1. ¿Puedo realizar groupby en datos no numéricos en Pandas?

Sí, puedes realizar groupby en datos no numéricos en Pandas. Si bien no puedes aplicar funciones de agregado como sum o mean a datos no numéricos, hay muchas operaciones que puedes realizar, como contar el número de ocurrencias de cada categoría.

  1. ¿Cómo utilizo groupby con PySpark?

El concepto de groupby es similar en PySpark como en Pandas. Después de agrupar, necesitas usar la función agg en PySpark para aplicar una función de agregado a cada grupo.