Lección 6.4 : GroupBy + Transform y Funcion anonima + Transform en pandas Dataframe
GroupBy + Transform y Función Anónima + Transform en Pandas DataFrame
Introducción
En esta lección, Yuscu Mejía nos enseñará cómo utilizar groupby
junto con transform
y cómo aplicar funciones anónimas con transform
en Pandas DataFrame. Aprenderemos a realizar transformaciones a nivel de grupo que devuelven un objeto del mismo tamaño que el DataFrame original, lo cual es útil para agregar columnas transformadas sin cambiar la estructura del DataFrame.
Características
El uso de groupby
con transform
y funciones anónimas en Pandas ofrece las siguientes características:
groupby
: Permite agrupar datos basados en una o más columnas.transform
: Aplica una función a cada grupo y devuelve un objeto del mismo tamaño que el DataFrame original.- Funciones Anónimas: Permiten definir funciones rápidas y concisas utilizando
lambda
para realizar transformaciones específicas. - Facilitan la realización de operaciones avanzadas de transformación sin modificar la estructura del DataFrame original.
Ejemplos
A continuación, Yuscu Mejía nos muestra algunos ejemplos de cómo utilizar groupby
con transform
y funciones anónimas en Pandas:
- Agrupar datos por una columna específica y aplicar una transformación utilizando
transform
. - Agrupar datos y aplicar una función anónima con
transform
. - Combinar múltiples transformaciones en un DataFrame agrupado.
# Importar pandas
import pandas as pd
# Crear DataFrame de ejemplo
data = {'Nombre': ['Ana', 'Luis', 'Ana', 'Carlos', 'Luis'],
'Edad': [23, 34, 23, 45, 34],
'Ciudad': ['Madrid', 'Barcelona', 'Madrid', 'Valencia', 'Barcelona'],
'Puntuacion': [85, 90, 78, 88, 92]}
df = pd.DataFrame(data)
print("DataFrame original:")
print(df)
# Agrupar por 'Nombre' y calcular la media de 'Puntuacion' usando transform
df['Media_Puntuacion'] = df.groupby('Nombre')['Puntuacion'].transform('mean')
print("\nDataFrame con Media de Puntuacion por 'Nombre':")
print(df)
# Aplicar una función anónima usando transform
df['Puntuacion_Relativa'] = df.groupby('Nombre')['Puntuacion'].transform(lambda x: x / x.max())
print("\nDataFrame con Puntuacion Relativa por 'Nombre':")
print(df)
# Combinar múltiples transformaciones
df['Diferencia_Puntuacion'] = df.groupby('Nombre')['Puntuacion'].transform(lambda x: x - x.mean())
print("\nDataFrame con Diferencia de Puntuacion por 'Nombre':")
print(df)
Práctica
Aprende a utilizar groupby
con transform
y funciones anónimas en Pandas siguiendo nuestro tutorial en video, presentado por Yuscu Mejía:
Ejercicio 1: GroupBy y Transformación Simple
Utiliza groupby
y aplica una transformación simple a un DataFrame agrupado.
- a) Crea un DataFrame de ejemplo y agrupa los datos por una columna específica.
- b) Aplica una transformación simple como la media a los datos agrupados utilizando
transform
.
Ejercicio 2: GroupBy y Función Anónima con Transform
Utiliza groupby
y aplica una función anónima con transform
a un DataFrame agrupado.
- a) Crea un DataFrame de ejemplo y agrupa los datos por una columna específica.
- b) Define y aplica una función anónima utilizando
lambda
a los datos agrupados contransform
.
#Ejercicio 1
a) GroupBy y Transformación Simple
import pandas as pd
# Crear DataFrame de ejemplo
data = {'Nombre': ['Ana', 'Luis', 'Ana', 'Carlos', 'Luis'],
'Edad': [23, 34, 23, 45, 34],
'Ciudad': ['Madrid', 'Barcelona', 'Madrid', 'Valencia', 'Barcelona'],
'Puntuacion': [85, 90, 78, 88, 92]}
df = pd.DataFrame(data)
print("DataFrame original:")
print(df)
# Agrupar por 'Nombre' y calcular la media de 'Puntuacion' usando transform
df['Media_Puntuacion'] = df.groupby('Nombre')['Puntuacion'].transform('mean')
print("\nDataFrame con Media de Puntuacion por 'Nombre':")
print(df)
b) GroupBy y Función Anónima con Transform
# Aplicar una función anónima usando transform
df['Puntuacion_Relativa'] = df.groupby('Nombre')['Puntuacion'].transform(lambda x: x / x.max())
print("\nDataFrame con Puntuacion Relativa por 'Nombre':")
print(df)
#Ejercicio 2
a) GroupBy y Múltiples Transformaciones
# Combinar múltiples transformaciones
df['Diferencia_Puntuacion'] = df.groupby('Nombre')['Puntuacion'].transform(lambda x: x - x.mean())
print("\nDataFrame con Diferencia de Puntuacion por 'Nombre':")
print(df)