Je traitais des données pour l'apprentissage automatique avec des pandas, Je voulais normaliser par groupe de certaines colonnes plutôt que normaliser dans son ensemble. Cependant, bien que le nom du groupe n'ait pas besoin d'être normalisé, il y avait une scène dans laquelle on souhaitait effectuer un traitement de normalisation tout en conservant le nom du groupe. C'est juste un mémo.
pandas = 0.25.3 numpy = 1.18.0
Normaliser les colonnes pour chaque nom de classe dans un tableau comme celui ci-dessous
class | a | b | c | |
---|---|---|---|---|
a | 1.0 | 2.0 | 3.0 | |
a | 4.0 | 5.0 | 6.0 | |
b | 7.0 | 8.0 | 9.0 | |
b | 10.0 | 11.0 | 12.0 |
import pandas as pd
import numpy as np
# make data set
df = pd.DataFrame(np.arange(12).reshape(4, 3),
columns=['col_0', 'col_1', 'col_2'],
index=['row_0', 'row_1', 'row_2','row_3'])
df["class"] = ["a", "a", "b", "b"]
# Standardization for each group
class_ = df[["class"]]
class_names = df.groupby("class").groups.keys()
for name in class_names:
df_tmp = df[(df['class'] == name)].drop(columns=['class'])
df[(df['class'] == name)] = (df_tmp - df_tmp.mean()) /df_tmp.std()
df["class"] = class_
Premier poste. .. C'est juste un mémo. S'il vous plaît laissez-moi savoir s'il existe une meilleure façon.
Recommended Posts