Angenommen, ich habe einen Pandas-Datenrahmen df
:
Ich möchte den spaltenweisen Mittelwert eines Datenrahmens berechnen.
Das ist einfach:
df.apply(average)
dann der spaltenweise Bereich max (col) - min (col). Das ist wieder einfach:
df.apply(max) - df.apply(min)
Nun möchte ich für jedes Element den Mittelwert seiner Spalte subtrahieren und durch den Bereich seiner Spalte dividieren. Ich bin mir nicht sicher, wie ich das machen soll
Jede Hilfe / Hinweise werden sehr geschätzt.
A
undB
sind Teil eines größeren Gruppierungsfaktors, den Sie getrennt vonC
und normalisieren möchtenD
.Wenn es Ihnen nichts ausmacht, die
sklearn
Bibliothek zu importieren , würde ich die in diesem Blog beschriebene Methode empfehlen .quelle
np_scaled = min_max_scaler.fit_transform(df.score.astype(float).values.reshape(-1, 1))
Sie können
apply
dies verwenden, und es ist ein bisschen ordentlicher:Es funktioniert auch gut mit
groupby
, wenn Sie die relevanten Spalten auswählen:quelle
Leicht modifiziert von: Python Pandas Dataframe: Daten zwischen 0,01 und 0,99 normalisieren? aber aus einigen Kommentaren ging hervor, dass dies relevant war (sorry, wenn dies als Repost angesehen wird ...)
Ich wollte eine angepasste Normalisierung, da das reguläre Perzentil des Bezugspunkts oder des Z-Scores nicht ausreicht. Manchmal wusste ich, was die realisierbaren Max- und Min-Werte der Bevölkerung waren, und wollte sie daher anders als meine Stichprobe oder einen anderen Mittelpunkt oder was auch immer definieren! Dies kann häufig nützlich sein, um Daten für neuronale Netze neu zu skalieren und zu normalisieren, wobei Sie möglicherweise alle Eingaben zwischen 0 und 1 wünschen, einige Ihrer Daten jedoch möglicherweise individueller skaliert werden müssen ... da Perzentile und Standardwerte Ihre Stichprobenabdeckungen voraussetzen die Bevölkerung, aber manchmal wissen wir, dass dies nicht wahr ist. Es war auch sehr nützlich für mich bei der Visualisierung von Daten in Heatmaps. Also habe ich eine benutzerdefinierte Funktion erstellt (zusätzliche Schritte im Code hier verwendet, um ihn so lesbar wie möglich zu machen):
Dadurch wird eine Pandas-Serie oder auch nur eine Liste aufgenommen und auf die angegebenen Tief-, Mittel- und Hochpunkte normalisiert. es gibt auch einen schrumpfungsfaktor! Damit Sie die Daten von den Endpunkten 0 und 1 weg verkleinern können (ich musste dies tun, wenn ich Farbkarten in Matplotlib kombinierte: Einzelne Farbkarten mit mehr als einer Farbkarte mit Matplotlib ). Sie können also wahrscheinlich sehen, wie der Code funktioniert, aber im Grunde sagen Sie es haben Werte [-5,1,10] in einer Stichprobe, möchten aber basierend auf einem Bereich von -7 bis 7 (also alles über 7, unsere "10" wird effektiv als 7 behandelt) mit einem Mittelpunkt von 2 normalisieren. Verkleinern Sie es jedoch auf eine 256-RGB-Farbkarte:
Es kann auch Ihre Daten auf den Kopf stellen ... das mag seltsam erscheinen, aber ich fand es nützlich für Heatmapping. Angenommen, Sie möchten eine dunklere Farbe für Werte, die näher an 0 als hoch / niedrig liegen. Sie können eine Heatmap basierend auf normalisierten Daten erstellen, wobei insideout = True:
Jetzt ist "2", die dem Zentrum am nächsten liegt und als "1" definiert ist, der höchste Wert.
Wie auch immer, ich dachte, meine Anwendung wäre relevant, wenn Sie Daten auf andere Weise neu skalieren möchten, die nützliche Anwendungen für Sie haben könnten.
quelle
So machen Sie es spaltenweise:
quelle