Ho un dataframe panda contenente dati spettrali e metadati. Le colonne sono etichettate con un multiindice in modo che df['wvl']
dia gli spettri e df['meta']
fornisca i metadati. Entro df['wvl']
le etichette di colonna rappresentano i valori di lunghezza d'onda per i canali dello spettrometro.Normalizza le righe del frame di dati panda in base alle somme
Quello che voglio fare è normalizzare ogni riga di df['wvl']
con la somma di quella riga in modo che sommando i valori nella riga dia un totale di 1.0.
Ecco cosa una riga della dataframe assomiglia:
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
Ma quando faccio qualcosa di simile:
df['wvl'].iloc[0]=df['wvl'].iloc[0]/df['wvl'].iloc[0].sum()
Niente succede! Ottengo gli esatti valori stessi:
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
Se creo una variabile temporanea per contenere la riga, posso fare la normalizzazione bene:
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
Ma se provo a sostituire la riga dataframe con la variabile temporanea normalizzato, non succede nulla:
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
sono ovviamente manca qualcosa qui, ma non riesco a capire cosa e sta guidando me insane. Aiuto? Grazie in anticipo!
Possibile duplicato di [normalizzazione un dataframe panda per riga] (https://stackoverflow.com/questions/18594469/normalizing-a-pandas-dataframe-by-row) –