[英]Get if a rolling window is increasing or decreasing
我有一个熊猫的DataFrame
,我想为移动窗口沿其列之一的每个间隔计算该间隔内的数据是增加还是减少。 对于增加/减少,我的意思是计算最后一个元素的符号减去第一个元素。
现在,我有此解决方案:
sign = data['col'].rolling('5d').apply(lambda x: np.sign(x[-1] - x[0]))
这个实现的问题是,对于长系列来说,它的速度非常慢。 您是否有使用内置的优化功能的解决方案?
如果您的“ 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(这里我假设您每天都有一个数据点)。 向量运算比使用滚动运算要快得多
通过使用内存开销rolling
功能,您只会得到不同的第一个值和最后一个值,这将降低整个过程的速度,在这里我使用merge_asof
s=df[['COL']].shift(4,freq='D')
s=pd.merge_asof(df,s,left_index=True,right_index=True,tolerance=pd.Timedelta('5d'),direction='forward')
np.sign(s['COL_x']-s['COL_y'])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.