es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

En agrupamiento con transformación minmax

Para cada ciudad, quiero crear una nueva columna que sea la escala minmax de otra columna (edad).
Intenté esto y obtengo el mensaje de error El input contiene el infinito o un valor demasiado grande para el tipo de dato (‘float64’).

cols=['age']

def f(x):
scaler1=preprocessing.MinMaxScaler()
x['age_minmax'] = scaler1.fit_transform(x[cols])
return x

df = df.groupby(['city']).apply(f)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El código que proporcionaste intenta crear una nueva columna llamada “age_minmax” para cada grupo de ciudades utilizando el método groupby de pandas. Sin embargo, parece que puede haber algunos valores extremos en la columna “age” que están causando errores al utilizar el MinMaxScaler del módulo de preprocesamiento de sklearn.

    Una posible solución a este problema es eliminar primero cualquier valor extremo de la columna “age” antes de aplicar el escalador. Esto se puede hacer utilizando el método clip de numpy, que establecerá cualquier valor por encima o por debajo de un cierto umbral en ese valor de umbral.

    Aquí tienes una versión actualizada del código que incluye el uso del método clip:

    cols=['age']
    
    def f(x):
        scaler1=preprocessing.MinMaxScaler()
        x['age'] = np.clip(x['age'], 0, 100) # eliminar valores extremos
        x[['age_minmax']] = scaler1.fit_transform(x[cols])
        return x
    
    df = df.groupby(['city']).apply(f)
    

    Este código recortará cualquier edad por debajo de 0 o por encima de 100 antes de aplicar el escalador, lo que debería evitar cualquier error debido a valores extremos. Ten en cuenta que es posible que debas ajustar los valores de umbral según el rango de edades en tu conjunto de datos.

Comments are closed.