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

Posted

技术标签:

【中文标题】如果条件不满足,则保留最后一个值的 if/elif/else 的 Numpy 等效项【英文标题】:Numpy equivalent of if/elif/else that keeps the last value if the condition is not met 【发布时间】:2019-01-05 13:49:49 【问题描述】:

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

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

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 个条件(ifelif ) 不满足。

提前致谢!

【问题讨论】:

【参考方案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 不能以这种方式填充。

【讨论】:

以上是关于如果条件不满足,则保留最后一个值的 if/elif/else 的 Numpy 等效项的主要内容,如果未能解决你的问题,请参考以下文章

if - elif 语句

if 判断

Python的 if .else.elif语句详解

DAY4 Python中的流程控制

python 进阶语法

如果满足 COUNT 条件,我可以应用 WHERE 子句吗?