首页 > 解决方案 > 获取滚动窗口是增加还是减少

问题描述

我有一个熊猫DataFrame,我想计算一个移动窗口的每个间隔沿着它的一个列,该间隔内的数据是增加还是减少。对于增加/减少,我的意思是计算最后一个元素的符号减去第一个元素。

现在我有这个解决方案:

sign = data['col'].rolling('5d').apply(lambda x: np.sign(x[-1] - x[0]))

这个实现的问题是它对于长系列来说非常慢。您有使用内置优化功能的解决方案吗?

标签: pythonpandasrolling-computation

解决方案


如果您的“col”值是均匀采样的,您可以应用类似于下面的内容。

col = pandas.Series([1,-1,0,3,5,21,7,4,67,4,3,6,8,5,4])
sign = np.sign(col.values[0:-5] - col.values[5:])

本质上,您取第一个 N-window_len 并减去最后一个 N-window_len(这里我假设您每天都有一个数据点)。矢量运算将比使用滚动快得多


推荐阅读