大熊猫numpy复杂如果

时间:2018-03-17 22:23:21

标签: python pandas numpy

我需要在这样的条件下为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相同 我该怎么办? 感谢

1 个答案:

答案 0 :(得分:3)

你的循环已关闭。您应该迭代df.iterrowsif条件应引用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()

这应该稍微更高效,因为它涉及更少的冗余计算。