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。这是一个技巧,看起来很容易阅读。谢谢你的帮助!!真有魅力!你能看看我的问题吗[