我想使用pandas ewmstd函数作为滚动窗口(仅使用最后N个元素)而不是作为展开窗口(使用所有元素)。任何人都知道如何做到这一点?这是一个例子:
set = np.array([0,0,0,0,0,0,0,10,10,10])
set2 = np.array([1,0,0,0,0,0,0,10,10,10])
set_op = pd.ewmstd(set, span=5)
set2_op = pd.ewmstd(set2, span=5)
print 'set_op', set_op
print 'set2_op', set2_op
输出:
set_op [ nan 0. 0. 0. 0. 0. 0. 5.37639567 5.57181916 5.06335969]
set_op2 [ nan 0.70 0.51 0.39 0.30 0.24 0.19 5.36 5.55 5.04]
如果操作仅使用最后5个元素,则set_op [7]应该产生与set_op2 [7]相同的结果,并忽略set2开头的1。
答案 0 :(得分:0)
John John,我想出了这个并且有效:
def onetime_ewmstd(arr):
return pd.ewmstd(arr, span=5)[-1]
set_rollop = pd.rolling_apply(set,5,onetime_ewmstd)