Supongamos que tengo un marco de datos de pandas df
:
Quiero calcular la columna sabia media de un marco de datos.
Esto es facil:
df.apply(average)
entonces el rango sabio de columna max (col) - min (col). Esto es fácil nuevamente:
df.apply(max) - df.apply(min)
Ahora, para cada elemento, quiero restar la media de su columna y dividirla por el rango de su columna. No estoy seguro de cómo hacerlo
Cualquier ayuda / punteros son muy apreciados.
A
yB
forme parte de un factor de agrupación más grande que desea normalizar por separado deC
yD
.Si no le importa importar la
sklearn
biblioteca, le recomendaría el método que se habla en este blog.fuente
np_scaled = min_max_scaler.fit_transform(df.score.astype(float).values.reshape(-1, 1))
Puedes usar
apply
esto, y es un poco más ordenado:Además, funciona bien
groupby
si selecciona las columnas relevantes:fuente
Ligeramente modificado de: Python Pandas Dataframe: ¿Normalizar datos entre 0.01 y 0.99? pero de algunos de los comentarios pensé que era relevante (lo siento si se considera una nueva publicación ...)
Quería una normalización personalizada en ese percentil regular de referencia o la puntuación z no era adecuada. ¡A veces sabía cuáles eran los valores máximos y mínimos posibles de la población y, por lo tanto, quería definirlos aparte de mi muestra, o un punto medio diferente, o lo que sea! Esto a menudo puede ser útil para reescalar y normalizar datos para redes neuronales donde es posible que desee todas las entradas entre 0 y 1, pero es posible que algunos de sus datos necesiten escalarse de una manera más personalizada ... porque los percentiles y estándares asumen que su muestra cubre la población, pero a veces sabemos que esto no es cierto. También fue muy útil para mí al visualizar datos en mapas de calor. Así que construí una función personalizada (usé pasos adicionales en el código aquí para que sea lo más legible posible):
Esto incluirá una serie de pandas, o incluso solo una lista, y la normalizará a los puntos bajos, centrales y altos especificados. ¡También hay un factor de contracción! para permitirle reducir la escala de los datos de los puntos finales 0 y 1 (tuve que hacer esto al combinar mapas de color en matplotlib: pcolormesh único con más de un mapa de colores usando Matplotlib ) Entonces, probablemente pueda ver cómo funciona el código, pero básicamente diga que tener valores [-5,1,10] en una muestra, pero desea normalizar en función de un rango de -7 a 7 (por lo tanto, cualquier cosa por encima de 7, nuestro "10" se trata como un 7 efectivamente) con un punto medio de 2, pero encogerlo para que se ajuste a un mapa de color 256 RGB:
También puede convertir sus datos al revés ... esto puede parecer extraño, pero lo encontré útil para el mapeo de calor. Supongamos que desea un color más oscuro para valores más cercanos a 0 en lugar de alto / bajo. Podría realizar un mapa de calor basado en datos normalizados donde insideout = True:
Así que ahora "2", que está más cerca del centro, definido como "1" es el valor más alto.
De todos modos, pensé que mi aplicación era relevante si estaba buscando reescalar datos de otras maneras que podrían tener aplicaciones útiles para usted.
fuente
Así es como lo haces en columna:
fuente