Mam pandasową ramkę danych zawierającą dane spektralne i metadane. Kolumny są oznaczone jako wiele indeksu, więc df['wvl']
daje widma, a df['meta']
podaje metadane. W ramach df['wvl']
etykiety kolumn są wartościami długości fal dla kanałów spektrometru.Normalizuj wiersze ramki danych pandy według ich wartości
Co chcę zrobić, to znormalizować każdy wiersz df['wvl']
przez sumę tego rzędu, tak aby zsumowanie wartości w wierszu daje łącznie 1,0.
Oto co jeden wiersz dataframe wygląda następująco:
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
Ale kiedy zrobić coś takiego:
df['wvl'].iloc[0]=df['wvl'].iloc[0]/df['wvl'].iloc[0].sum()
Nic się nie dzieje! Mam dokładnie te same wartości:
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śli utworzyć zmienną tymczasową trzymać wiersz, mogę zrobić normalizację dobrze:
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
Ale gdy próbuję zastąpić wiersz dataframe z zmienna tymczasowa znormalizowane, nic się nie dzieje:
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
ja oczywiście brakuje czegoś tutaj, ale nie mogę dowiedzieć się, co i to doprowadza mnie do szaleństwa. Wsparcie? Z góry dziękuję!
Możliwe duplikat [Normalizowanie jak DataFrame pandas po wierszu] (https://stackoverflow.com/questions/18594469/normalizing-a-pandas-dataframe-by-row) –