我有以下代码,其中变量“ close”,“ closeLow”和“ closeHigh”是相同大小的Numpy 1D数组。
我想使用某些函数作为“ 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]
这里的问题是,我找不到任何简单的方法来重现最后一行的效果,如果不满足2个条件(if和elif),我们将保留最后一次迭代的结果。
提前致谢!
最佳答案
使用np.select
和pd.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不能用这种方式填充。