Aplicar Operaciones A Grupos En Pandas

Prerrequisitos:   Pandas 

Pandas es una biblioteca de Python para el análisis y la manipulación de datos. A menudo, el análisis de datos requiere que los datos se dividan en grupos para realizar varias operaciones en estos grupos. La función GroupBy en Pandas emplea la estrategia dividir-aplicar-combinar, lo que significa que realiza una combinación de: dividir un objeto, aplicar funciones al objeto y combinar los resultados. En este artículo, usaremos la función groupby() para realizar varias operaciones en datos agrupados. 

Agregación

La agregación implica la creación de resúmenes estadísticos de datos con métodos como media, mediana, moda, min (mínimo), max (máximo), std (desviación estándar), var (varianza), suma, conteo, etc. Para realizar la operación de agregación en grupos:

  • Módulo de importación
  • Crear o cargar datos
  • Cree un objeto GroupBy que agrupe datos a lo largo de una clave o varias claves
  • Aplicar una operación estadística.

Ejemplo 1: Calcular los salarios medios y la edad de los grupos de hombres y mujeres. Da la media de las columnas numéricas y agrega un prefijo a los nombres de las columnas.

Python3

# Import required libraries
import pandas as pd
import numpy as np
 
# Create a sample dataframe
df = pd.DataFrame({"dept": np.random.choice(["IT", "HR", "Sales", "Production"], size=50),
                   "gender": np.random.choice(["F", "M"], size=50),
                   "age": np.random.randint(22, 60, size=50),
                   "salary": np.random.randint(20000, 90000, size=50)})
df.index.name = "emp_id"
 
# Calculate mean data of gender groups
df.groupby('gender').mean().add_prefix('mean_')

Producción:

Ejemplo 2: Realización de varias operaciones de agregado utilizando la función de agregado ( DataFrameGroupBy.agg ) que acepta una string, una función o una lista de funciones.  

Python3

# Import required libraries
import pandas as pd
import numpy as np
 
# Create a sample dataframe
df = pd.DataFrame({"dept": np.random.choice(["IT", "HR", "Sales", "Production"], size=50),
                   "gender": np.random.choice(["F", "M"], size=50),
                   "age": np.random.randint(22, 60, size=50),
                   "salary": np.random.randint(20000, 90000, size=50)})
df.index.name = "emp_id"
 
# Calculate min, max, mean and count of salaries
# in different departments for males and females
df.groupby(['dept', 'gender'])['salary'].agg(["min", "max", "mean", "count"])

Producción:

Ejemplo 3: especificación de varias columnas y sus correspondientes operaciones agregadas de la siguiente manera.

Python3

# Import required libraries
import pandas as pd
import numpy as np
 
# Create a sample dataframe
df = pd.DataFrame({"dept": np.random.choice(["IT", "HR", "Sales", "Production"], size=50),
                   "gender": np.random.choice(["F", "M"], size=50),
                   "age": np.random.randint(22, 60, size=50),
                   "salary": np.random.randint(20000, 90000, size=50)})
df.index.name = "emp_id"
 
# Calculate mean salaries and min-max age of employees
# in different departments for gender groups
df.groupby(['dept', 'gender']).agg({'salary': 'mean', 'age': ['min', 'max']})

Producción:

Ejemplo 4: Mostrar estadísticas comunes para cualquier grupo. 

Python3

# Import required libraries
import pandas as pd
import numpy as np
 
# Create a sample dataframe
df = pd.DataFrame({"dept": np.random.choice(["IT", "HR", "Sales", "Production"], size=50),
                   "gender": np.random.choice(["F", "M"], size=50),
                   "age": np.random.randint(22, 60, size=50),
                   "salary": np.random.randint(20000, 90000, size=50)})
df.index.name = "emp_id"
 
# Statistics of employee age grouped by departments
df["age"].groupby(df['dept']).describe()

Producción:

Crear bins o grupos y aplicar operaciones

El método de corte de Pandas ordena los valores en intervalos de contenedores creando grupos o categorías. A continuación, se pueden realizar agregaciones u otras funciones en estos grupos. La implementación de esto se muestra a continuación:

Ejemplo: la edad se divide en rangos de edad y se calcula el recuento de observaciones en los datos de muestra. 

Python3

# Import required libraries
import pandas as pd
import numpy as np
 
# Create a sample dataframe
df = pd.DataFrame({"dept": np.random.choice(["IT", "HR", "Sales", "Production"], size=50),
                   "gender": np.random.choice(["F", "M"], size=50),
                   "age": np.random.randint(22, 60, size=50),
                   "salary": np.random.randint(20000, 90000, size=50)})
df.index.name = "emp_id"
 
# Create bin intervals
bins = [20, 30, 45, 60]
 
# Segregate ages into bins of age groups
df['categories'] = pd.cut(df['age'], bins,
                          labels=['Young', 'Middle', 'Old'])
 
# Calculate number of observations in each age category
df['age'].groupby(df['categories']).count()

Producción:

Transformación

La transformación es realizar una operación específica de grupo en la que los valores individuales cambian mientras que la forma de los datos sigue siendo la misma. Usamos la función transform() para hacerlo.

Ejemplo :

Python3

# Import required libraries
import pandas as pd
import numpy as np
 
# Create a sample dataframe
df = pd.DataFrame({"dept": np.random.choice(["IT", "HR", "Sales", "Production"], size=50),
                   "gender": np.random.choice(["F", "M"], size=50),
                   "age": np.random.randint(22, 60, size=50),
                   "salary": np.random.randint(20000, 90000, size=50)})
df.index.name = "emp_id"
 
# Calculate mean difference by transforming each salary value
df['mean_sal_diff'] = df['salary'].groupby(
    df['dept']).transform(lambda x: x - x.mean())
df.head()

Producción:

Publicación traducida automáticamente

Artículo escrito por akshisaxena y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *