Normaliser les lignes de pandas trame de données par leurs sommes

J'ai une pandas dataframe contenant des données spectrales et les métadonnées. Les colonnes sont étiquetés avec un multiindex de sorte que df['wvl'] donne les spectres et df['meta'] donne les métadonnées. Dans df['wvl'] les étiquettes de colonne sont de la longueur d'onde des valeurs pour le spectromètre de canaux.

Ce que je veux faire est de normaliser chaque ligne de df['wvl'] par la somme de la ligne de sorte que l'addition des valeurs dans la ligne, donne un total de 1,0.

Voici ce qu'une ligne de la dataframe ressemble:

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

Mais quand je fais quelque chose comme:

df['wvl'].iloc[0]=df['wvl'].iloc[0]/df['wvl'].iloc[0].sum()

Rien ne se passe! J'obtiens exactement les mêmes valeurs:

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

Si je créer une variable temporaire pour contenir la ligne, je peux faire la normalisation parfaitement:

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

Mais si j'essaie de remplacer le dataframe ligne avec le normalisée variable temporaire, rien ne se passe:

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

Je suis évidemment manque quelque chose ici, mais je ne peux pas comprendre quoi et ça me conduire fou. De l'aide? Merci à l'avance!

OriginalL'auteur rba | 2016-02-28