获取滚动 window 是否增加或减少
Get if a rolling window is increasing or decreasing
我有一只熊猫的 DataFrame
,我想针对其中一列移动 window 的每个间隔计算该间隔内的数据是增加还是减少。对于增加/减少,我的意思是计算最后一个元素减去第一个元素的符号。
目前我有这个解决方案:
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'])
我有一只熊猫的 DataFrame
,我想针对其中一列移动 window 的每个间隔计算该间隔内的数据是增加还是减少。对于增加/减少,我的意思是计算最后一个元素减去第一个元素的符号。
目前我有这个解决方案:
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'])