gpt4 book ai didi

python - 通过它们的总和规范化 Pandas 数据框的行

转载 作者:IT老高 更新时间:2023-10-28 20:57:28 26 4
gpt4 key购买 nike

我有一个包含光谱数据和元数据的 pandas 数据框。列用多索引标记,以便 df['wvl'] 给出光谱,df['meta'] 给出元数据。在 df['wvl'] 中,列标签是光谱仪 channel 的波长值。

我想要做的是通过该行的总和对 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

我显然在这里遗漏了一些东西,但我不知道是什么,这让我发疯了。帮助?提前致谢!

最佳答案

你可以使用

df.div(df.sum(axis=1), axis=0)

df.sum(axis=1) 对每一行求和; df.div(..., axis=0) 然后除以。

例子:

import pandas as pd

df = pd.DataFrame({'a': [1, 2], 'b': [3, 4]})
>>> df.div(df.sum(axis=1), axis=0)
a b
0 0.250000 0.750000
1 0.333333 0.666667

关于python - 通过它们的总和规范化 Pandas 数据框的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35678874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com