Ich verarbeitete Daten für maschinelles Lernen mit Pandas. Ich wollte nach Gruppen einiger Spalten standardisieren, anstatt als Ganzes zu standardisieren. Obwohl der Gruppenname nicht standardisiert werden muss, gab es eine Szene, in der eine Standardisierungsverarbeitung unter Beibehaltung des Gruppennamens durchgeführt werden sollte. Es ist nur ein Memo.
pandas = 0.25.3 numpy = 1.18.0
Standardisieren Sie die Spalten für jeden Klassennamen in einer Tabelle wie der folgenden
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_
Erster Beitrag. .. Es ist nur ein Memo. Bitte lassen Sie mich wissen, ob es einen besseren Weg gibt.
Recommended Posts