【发布时间】:2016-06-11 06:31:05
【问题描述】:
我有一个包含光谱数据和元数据的 pandas 数据框。这些列用多索引标记,以便df['wvl'] 给出光谱,df['meta'] 给出元数据。在df['wvl'] 中,列标签是光谱仪通道的波长值。
我想要做的是通过该行的总和对df['wvl'] 的每一行进行归一化,以便将行中的值相加得到 1.0。
数据框的一行如下所示:
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
但是当我做类似的事情时:
df['wvl'].iloc[0]=df['wvl'].iloc[0]/df['wvl'].iloc[0].sum()
什么都没有发生!我得到完全相同的值:
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
如果我创建一个临时变量来保存行,我可以正常化:
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
但如果我尝试用规范化的临时变量替换数据框行,则什么也不会发生:
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
我显然在这里遗漏了一些东西,但我不知道是什么,这让我发疯了。帮助?提前致谢!
【问题讨论】: