获取滚动窗口是增大还是减小

2024-04-24 06:34:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个panda的DataFrame,我想计算一个移动窗口中每一个列的间隔,这个间隔内的数据是增加还是减少。对于增加/减少,我的意思是计算最后一个元素减去第一个元素的符号。你知道吗

目前我有一个解决方案:

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

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


Tags: 数据lambda元素dataframedata间隔np符号
2条回答

使用内存开销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'])

如果“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窗口,减去最后一个N窗口(这里我假设每天都有一个数据点)。矢量运算要比滚动运算快得多

相关问题 更多 >