首页 > 解决方案 > 您如何获得与熊猫系列中的条件匹配的最后第 n 个项目(来自 PineScript 的 valuewhen)

问题描述

在 PineScript 中有一个函数调用valuewhen,当条件为真时返回源的第 n 个最近出现的值。因此,例如,当条件为真时,索引为零将返回最近的值,而索引为 1 将返回第二近的值。

你如何在 Python 中使用 Pandas 来做到这一点Series?PineScript 中的函数签名是valuewhen(condition, source, occurrence) → series[float]

标签: pythonpandastime-seriespine-script

解决方案


要实现此功能,首先使用 reindex 和条件作为掩码删除不需要的值。接下来,根据需要发生的事件来移动系列。然后,使用 reindex 添加从掩码中删除的索引值并首先重新索引。这些索引值将指向np.nan。最后,用于ffill()将填充值转发到np.nan值上。

这假设occurrences是一个适当有界的非负数,source是一个有序序列,并且condition与源相关index

这可以用 Python 写成这样:

def valuewhen(condition, source, occurrence):
    return source \
        .reindex(condition[condition].index) \
        .shift(-occurrence) \
        .reindex(source.index) \
        .ffill()

推荐阅读