Agrupación de datos con Pandas
Pandas es la biblioteca por excelencia para el manejo de datos en Python, con innumerables funciones para realizar diversas acciones sobre datos. En este artículo veremos en particular la extracción de información mediante la agrupación de datos y funciones de agregación.
Agrupación qué es?
Los métodos de agrupación son aquellos que permiten realizar agrupaciones o clasificaciones de los datos mediante la categorización de una o mas columnas dentro de un dataframe. Estas funciones permiten resumir y aglutinar sobre un conjunto de datos, realizando a la vez funciones combinadas.
La función groupby como se detalla en su página de documentación permite categorizar los datos en base a una función y establecer una combinación de los resultados.
Ejemplos
Tomando como base los siguientes conjuntos de datos
- Datos de aprensiones de la fiscalía nacional de Chile (detenciones.csv)
- Datos de empleados (employee.csv)
import pandas as pd
import numpy as py
urlfile = "https://data.vgclab.cl/public_data/dataset_detenciones.csv"
det = pd.read_csv(urlfile, sep=";")
urlfile = "https://github.com/laxmimerit/All-CSV-ML-Data-Files-Download/blob/master/employees.csv"
emp = pd.read_csv(urlfile)
Estas funciones de agregación permiten responder a preguntas tales como:
¿cuántos empleados hay en cada departamento?
depto_employee = emp.groupby(['Team'])['Team'].agg('count')
¿cuántos empleados de cada genero hay en cada departamento?
depto_sex = emp.groupby(['Team'])['Gender'].agg('count')
¿cuántos empleados hay por departamento y cual es el sueldo promedio por departamento?
depto_promedio = emp.groupby(['Team']).agg({'First Name':'count', 'Salary': 'mean'})
¿cual es el sueldo promedio por sexo?
depto_sexsalary = emp.groupby(['Team', 'Gender'])['Salary'].agg('mean')
¿cuál es promedio así como el mayor y menor sueldo por departamento?
depto_salary = emp.groupby(['Team])['Salary'].agg(['mean', 'max', 'min'])
Para el caso de de las detenciones de fiscalía podríamos preguntarnos lo siguiente:
#
region_delitos = det.groupby(['DELITO']).agg(SUMA=('CASOS','sum'), PROMEDIO=('CASOS', 'mean'), MAXIMO = ('CASOS','max')).head(20)
#