如何获得大熊猫系列值的某些长度n的滚动值?
例如,如果我有以下内容:
df = pd.DataFrame({'temperature': [0, 1, 2, np.nan, 4, 2, 0.8, 4, 8.8, 7.12]})
如何获得长度为n的移动值,例如,如果n = 3:
[NaN,NaN,0],[NaN,0,1],......,[4,8.8,7.12]
编辑: 如果我使用pandas滚动,如:
roll = pd.Series.rolling(df, 3).mean()
然后roll是该系列的移动平均线。 在这里,我不想要每个移动的3个值的平均值,而是这些3个值的集合。
答案 0 :(得分:5)
我认为您需要先添加NaN
s然后添加this solution:
N = 3
x = np.concatenate([[np.nan] * (N-1), df['temperature'].values])
def rolling_window(a, window):
shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
strides = a.strides + (a.strides[-1],)
return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
print (rolling_window(x, N))
[[ nan nan 0. ]
[ nan 0. 1. ]
[ 0. 1. 2. ]
[ 1. 2. nan]
[ 2. nan 4. ]
[ nan 4. 2. ]
[ 4. 2. 0.8 ]
[ 2. 0.8 4. ]
[ 0.8 4. 8.8 ]
[ 4. 8.8 7.12]]