Pandas agrupación de datos (cut / qcut)

La agrupación de datos (también llamada agrupamiento en contenedores) es el proceso de discretizar variables continuas, comúnmente utilizado en preprocesamiento de datos, ingeniería de características y análisis de datos.


cut: agrupación de igual ancho

cutDivide los datos en intervalos de igual ancho.

Ejemplo

import pandas as pd
import numpy as np

# Crear datos de edad
ages = pd.Series([5, 15, 25, 35, 45, 55, 65, 75, 85])

print("Datos originales:")
print(ages.tolist())
print()

# Agrupación de igual ancho (5 intervalos)
bins = [0, 20, 40, 60, 80, 100]
labels = ["Niños", "Jóvenes", "Mediana edad", "Mayores", "Ancianos"]

age_bins = pd.cut(ages, bins=bins, labels=labels)
print("Resultado de la agrupación de igual ancho:")
print(age_bins)
print()

# Incluye el límite derecho
age_bins2 = pd.cut(ages, bins=4)
print("Agrupación automática de igual ancho:")
print(age_bins2)

Devolver categorías y límites

Ejemplo

import pandas as pd
import numpy as np

ages = pd.Series([5, 15, 25, 35, 45])

# Devolver el índice de los intervalos
result = pd.cut(ages, bins=4, labels=False)
print("Índice de intervalos:")
print(result)
print()

# Devolver los límites de los intervalos
result = pd.cut(ages, bins=4, retbins=True)
print("Límites de intervalos:")
print(result[1])

qcut: agrupación de igual frecuencia

qcutDivide los datos en intervalos que contienen aproximadamente la misma cantidad de puntos de datos.

Ejemplo

import pandas as pd
import numpy as np

# Datos con distribución desigual
data = pd.Series([1, 1, 1, 2, 3, 4, 5, 10, 20, 30, 50, 100])

print("Datos originales:")
print(data.tolist())
print()

# Agrupación de igual ancho (puede causar distribución desigual)
cut_result = pd.cut(data, q=4)
print("Agrupación de igual ancho:")
print(cut_result.value_counts())
print()

# Agrupación de igual frecuencia (cada intervalo tiene aproximadamente la misma cantidad de puntos de datos)
qcut_result = pd.qcut(data, q=4)
print("Agrupación de igual frecuencia:")
print(qcut_result.value_counts())

Especificar cuantiles

Ejemplo

import pandas as pd

data = pd.Series(range(1, 101))

# Dividir según cuantiles especificados
result = pd.qcut(data, q=[0, 0.1, 0.3, 0.7, 0.9, 1])
print("División por cuantiles:")
print(result.value_counts().sort_index())

Práctica: análisis de datos

Ejemplo

import pandas as pd
import numpy as np

# Simular datos de consumo de clientes
np.random.seed(42)
customers = pd.DataFrame({
    "ID de cliente": range(1, 101),
    "Monto de consumo": np.random.exponential(500, 100) + 100
})

# Agrupar en diferentes niveles de consumo
customers["Nivel de consumo"] = pd.cut(
    customers["Monto de consumo"],
    bins=[0, 300, 500, 800, float("inf")],
    labels=["Bajo", "Medio", "Alto", "VIP"]
)

# Contar el número de clientes por nivel
print("Distribución de niveles de consumo:")
print(customers["Nivel de consumo"].value_counts())
print()

# Calcular el consumo promedio por nivel
print("Consumo promedio por nivel:")
print(customers.groupby("Nivel de consumo")["Monto de consumo"].mean().round(2))
Otras extensiones