我需要在这样的条件下为pandas dataframe添加一列: 如果销售量(存储在数据集['总和']中)在4到16之间,则预测应为1,否则舍入为平均销售量(存储在数据集中['平均值'])这是代码:
def more_than3_filter(dataset, filename):
prediction = []
for row in dataset['part number']:
if dataset['sum'] > 3:
if dataset['sum'] < 16:
prediction.append(1)
else:
prediction.append(round(dataset['average']))
我得到了
ValueError:系列的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。
与np.where相同 我该怎么办? 感谢
答案 0 :(得分:3)
你的循环已关闭。您应该迭代df.iterrows
,if
条件应引用row
,而不是dataset
。
除此之外,你根本不需要循环。您可以使用pd.Series.between
+ np.where
df['new'] = np.where(
df['sum'].between(3, 16, inclusive=False), 1, df['average'].round()
)
另一种解决方案涉及loc
-
df['new'] = 1
m = ~df['sum'].between(3, 16, inclusive=False)
df.loc[m, 'new'] = df.loc[m, 'average'].round()
这应该稍微更高效,因为它涉及更少的冗余计算。