熊猫滚动值

时间:2018-02-20 11:03:20

标签: python pandas

如何获得大熊猫系列值的某些长度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个值的集合。

1 个答案:

答案 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]]