Suponha que eu tenha um quadro de dados do pandas df
:
Quero calcular a média da coluna de um quadro de dados.
Isso é facil:
df.apply(average)
então o intervalo sábio da coluna max (col) - min (col). Isso é fácil novamente:
df.apply(max) - df.apply(min)
Agora, para cada elemento, quero subtrair a média da coluna e dividir pelo intervalo da coluna. Eu não tenho certeza de como fazer isso
Qualquer ajuda / sugestões são muito apreciadas.
A
e façaB
parte de um fator de agrupamento maior que você deseja normalizar separadamente deC
eD
.Se você não se importa de importar a
sklearn
biblioteca, eu recomendaria o método discutido neste blog.fonte
np_scaled = min_max_scaler.fit_transform(df.score.astype(float).values.reshape(-1, 1))
Você pode usar
apply
isso e é um pouco mais limpo:Além disso, funciona bem
groupby
se você selecionar as colunas relevantes:fonte
Ligeiramente modificado de: Python Pandas Dataframe: Normaliza dados entre 0,01 e 0,99? mas, de alguns dos comentários, isso foi relevante (desculpe se considerado um repost ...)
Eu queria que a normalização personalizada desse percentil regular de referência ou z-score não fosse adequada. Às vezes eu sabia quais eram os máximos e os mínimos possíveis da população e, portanto, queria defini-lo além da minha amostra, ou um ponto médio diferente, ou o que seja! Isso geralmente pode ser útil para redimensionar e normalizar dados para redes neurais, onde você pode querer todas as entradas entre 0 e 1, mas alguns dados podem precisar ser redimensionados de uma maneira mais personalizada ... porque os percentis e stdevs pressupõem que sua amostra cobre a população, mas às vezes sabemos que isso não é verdade. Também foi muito útil para visualizar dados em mapas de calor. Então, eu criei uma função personalizada (usei etapas extras no código aqui para torná-lo o mais legível possível):
Isso inclui uma série de pandas, ou mesmo apenas uma lista, e normaliza-a nos pontos baixo, central e alto especificados. Também há um fator de contração! para permitir que você reduza os dados dos pontos de extremidade 0 e 1 (eu tive que fazer isso ao combinar mapas de cores no matplotlib: pcolormesh único com mais de um mapa de cores usando o Matplotlib ). Portanto, você provavelmente pode ver como o código funciona, mas basicamente diz tem valores [-5,1,10] em uma amostra, mas deseja normalizar com base em um intervalo de -7 a 7 (portanto, acima de 7, nosso "10" é tratado como um 7 efetivamente) com um ponto médio de 2, mas reduza-o para caber em um mapa de cores de 256 RGB:
Ele também pode transformar seus dados de dentro para fora ... isso pode parecer estranho, mas achei útil para o mapeamento de calor. Digamos que você queira uma cor mais escura para valores próximos de 0, em vez de alto / baixo. Você poderia fazer um mapa de calor com base em dados normalizados, onde insideout = True:
Então agora "2", que está mais próximo do centro, definido como "1", é o valor mais alto.
De qualquer forma, achei que meu aplicativo era relevante se você estivesse procurando redimensionar dados de outras maneiras que poderiam ter aplicativos úteis para você.
fonte
É assim que você faz em colunas:
fonte