Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.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_Dataframe - Fatal编程技术网

Python 熊猫:若下一列的行包含某个值,则将列数据除以数字

Python 熊猫:若下一列的行包含某个值,则将列数据除以数字,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个由三列组成的数据框架 qty unit_of_measure qty_cal 3 nodes nan 4 nodes nan 5 nodes nan 6 cores nan 7 nodes nan 10 cores

我有一个由三列组成的数据框架

qty     unit_of_measure     qty_cal
3          nodes               nan
4          nodes               nan  
5          nodes               nan
6          cores               nan
7          nodes               nan
10         cores               nan  
3          nodes               nan
我想添加一个条件来填充qty\u cal

条件是如果度量单位等于“节点”,则将qty的行值填充到qty cal中

如果是“核心”,则将数量值除以16并填充数量校准

我试过的代码是

if ppn_df['unit_of_measure'] == 'Nodes': 
    ppn_df['qty'] 

elif ppn_df['unit_of_measure'] =='Cores':
    ppn_df['qty'] / 16 
我得到了一个错误的答案

ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。

我不确定为什么会出现这个值错误。我不明白为什么if语句含糊不清


有人愿意解释一下吗?

使用
np。where

df['qty_cal'] = np.where(df['unit_of_measure'] == 'nodes', df['qty'], df['qty']/16)

语句
ppn_df['unit_of_measure']
返回一个序列(一列),其中包含所有值,而不是单个项。一种方法是使用
apply
map

试试这个

ppn_df.qty_cal = ppn_df.apply(lambda x: x['qty'] if x['unit_of_measure'] == 'nodes' else x['qty'] / 16, axis=1)

此函数将为系列中的每一行执行
lambda
函数

我从未使用过np。这是一个技巧,看起来很容易阅读。谢谢你的帮助!!真有魅力!你能看看我的问题吗[