我有一个由三列组成的数据框
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_cal 。
条件是,如果unit_of_measure等于“ nodes”,则将qty的行值填充到qty_cal
如果它是“核心”,则将数量值除以16,然后填充数量ty_cal
我尝试过的代码是
if ppn_df['unit_of_measure'] == 'Nodes':
ppn_df['qty']
elif ppn_df['unit_of_measure'] =='Cores':
ppn_df['qty'] / 16
我遇到了一个错误
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我不确定为什么会出现此值错误。我不明白为什么if语句不明确。
有人可以解释吗?
答案 0 :(得分:4)
使用np.where
:
df['qty_cal'] = np.where(df['unit_of_measure'] == 'nodes', df['qty'], df['qty']/16)
答案 1 :(得分:1)
语句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
函数