我有一个包含光谱数据和元数据的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
但如果我尝试用规范化的临时变量替换dataframe行,则不会发生任何事情:
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
很明显我在这里漏掉了一些东西,但我不知道是什么让我发疯。帮忙?提前谢谢!
你可以用
df.sum(axis=1)
对每一行进行求和;df.div(..., axis=0)
然后进行除法。示例:
相关问题 更多 >
编程相关推荐