Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过数据帧行的和来规范化数据帧行_Python_Pandas - Fatal编程技术网

Python 通过数据帧行的和来规范化数据帧行

Python 通过数据帧行的和来规范化数据帧行,python,pandas,Python,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 ...

我有一个包含光谱数据和元数据的熊猫数据框架。列用多索引标记,以便
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.div(df.sum(axis=1), axis=0)
df.sum(轴=1)
对每行求和
df.div(…,轴=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

哇,真是妙极了!谢谢你能帮我理解为什么我所做的不起作用吗?@eft773所以我做了一些修改,看起来
iloc
正在返回一个副本,因此,分配给它不会改变任何东西。这能回答你的问题吗?啊,我明白了。我认为这是有道理的。因此,实际上,
df['wvl'].iloc[0]
不再是df['wvl']的一部分,因此编辑它对原始文件没有任何影响。非常感谢。为什么
axis=1
是行和,而
axis=1
是列除法?