如果不满足条件,则保留等于最后一个值的if / elif / else的numpy

时间:2018-07-28 20:05:15

标签: python pandas loops numpy vectorization

我有以下代码,其中变量“ close ”,“ closeLow ”和“ closeHigh ”是大小相同的Numpy一维数组

我想使用某些函数“ np.where”或任何其他矢量化/高效方式来计算数组“ showData ”,如下面的代码所示。

showData = np.full(len(close), True)
for i in range(len(close)):
    if close[i] < closeLow[i]:
        showData[i] = True
    elif close[i] > closeHigh[i]:
        showData[i] = False
    else:
        showData[i] = showData[i-1]

这里的问题是,我找不到任何简单的方法来重现最后一行的效果,如果两个条件( if elif )。

谢谢!

1 个答案:

答案 0 :(得分:1)

使用np.selectpd.Series.ffill转发填充数据。

showdata = pd.Series(np.select(
        [close < closeLow, close > closeHigh], [1., 0.], default=np.nan)
    ).ffill().astype(bool)

通过在满足条件的情况下分配1或0来工作,否则分配NaN。 ffill然后正向填充最后一个非空值的NaN。

无法以这种方式填充数组/系列开头的NaN。