[Explicado] Cómo agrupar un DataFrame en Python, Pandas, PySpark
Published on
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.
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
- ¿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.
- ¿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.
- ¿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.