Tôi có một khung dữ liệu gấu trúc chứa dữ liệu phổ và siêu dữ liệu. Các cột được gắn nhãn bằng multiindex sao cho df['wvl']
cung cấp cho quang phổ và df['meta']
cung cấp siêu dữ liệu. Trong các nhãn df['wvl']
các nhãn cột là các giá trị bước sóng cho các kênh phổ kế.Bình thường hóa các hàng khung dữ liệu gấu trúc theo số tiền của chúng
Điều tôi muốn làm là chuẩn hóa mỗi hàng của df['wvl']
bằng tổng của hàng đó để cộng các giá trị trong hàng cho tổng cộng là 1.0.
Đây là những gì một hàng của dataframe trông giống như:
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
Nhưng khi tôi làm điều gì đó như:
df['wvl'].iloc[0]=df['wvl'].iloc[0]/df['wvl'].iloc[0].sum()
Không có gì xảy ra! Tôi nhận được cùng một giá trị chính xác:
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
Nếu tôi có thể tạo một biến tạm thời để giữ liên tiếp, tôi có thể làm việc bình thường hóa tốt:
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
Nhưng nếu tôi cố gắng để thay thế hàng dataframe với biến tạm thời được chuẩn hóa, không có gì xảy ra:
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
Tôi rõ ràng thiếu thứ gì đó ở đây, nhưng tôi không thể hiểu được điều gì làm tôi phát điên. Cứu giúp? Cảm ơn trước!
có thể trùng lặp của [Bình thường hoá một DataFrame gấu trúc bởi hàng] (https://stackoverflow.com/questions/18594469/normalizing-a-pandas-dataframe-by-row) –