Ich habe einen Pandas Datenrahmen mit spektralen Daten und Metadaten. Die Spalten sind mit einem Multiindex gekennzeichnet, so dass df['wvl']
die Spektren und df['meta']
die Metadaten angibt. Innerhalb von df['wvl']
sind die Spaltenbezeichnungen die Wellenlängenwerte für die Spektrometerkanäle.Normalisieren Reihen von Pandas Datenrahmen durch ihre Summen
Was ich tun möchte, ist jede Zeile von df['wvl']
durch die Summe dieser Zeile zu normalisieren, so dass das Addieren der Werte in der Zeile insgesamt 1.0 ergibt.
Hier ist, was eine Zeile des Datenrahmen wie folgt aussieht:
df['wvl'].iloc[0]
246.050003 128.533035
246.102005 102.756321
246.156006 99.930775
...
848.697205 121.313347
848.896423 127.011662
849.095703 123.234168
Name: 0, dtype: float64
Aber wenn ich so etwas tun:
df['wvl'].iloc[0]=df['wvl'].iloc[0]/df['wvl'].iloc[0].sum()
Nichts passiert! Ich bekomme genau die gleichen Werte:
df['wvl'].iloc[0]
246.050003 128.533035
246.102005 102.756321
246.156006 99.930775
...
848.697205 121.313347
848.896423 127.011662
849.095703 123.234168
Name: 0, dtype: float64
Wenn ich eine temporäre Variable erstellen, die Zeile zu halten, kann ich die Normalisierung ganz gut tun:
temp=df['wvl'].iloc[0]
temp=temp/temp.sum()
temp
246.050003 0.000027
246.102005 0.000022
246.156006 0.000021
...
848.697205 0.000026
848.896423 0.000027
849.095703 0.000026
Name: 0, dtype: float64
Aber wenn ich versuche, den Datenrahmen Reihe zu ersetzen die normierte temporäre Variable, passiert nichts:
df['wvl'].iloc[0]=temp
df['wvl'].iloc[0]
246.050003 128.533035
246.102005 102.756321
246.156006 99.930775
...
848.697205 121.313347
848.896423 127.011662
849.095703 123.234168
Name: 0, dtype: float64
ich offensichtlich etwas fehlt hier bin, aber ich kann nicht herausfinden, was und es macht mich verrückt. Hilfe? Danke im Voraus!
Mögliche Duplizieren von [A pandas Datenrahmen für Reihe Normalisieren] (https://stackoverflow.com/questions/18594469/normalizing-a-pandas-dataframe-by-row) –