Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating a Pandas rolling-window series of arrays

Suppose I have the following code:

import numpy as np
import pandas as pd
x = np.array([1.0, 1.1, 1.2, 1.3, 1.4])
s = pd.Series(x, index=[1, 2, 3, 4, 5])

This produces the following s:

1    1.0
2    1.1
3    1.2
4    1.3
5    1.4

Now what I want to create is a rolling window of size n, but I don't want to take the mean or standard deviation of each window, I just want the arrays. So, suppose n = 3. I want a transformation that outputs the following series given the input s:

1    array([1.0, nan, nan])
2    array([1.1, 1.0, nan])
3    array([1.2, 1.1, 1.0])
4    array([1.3, 1.2, 1.1])
5    array([1.4, 1.3, 1.2])

How do I do this?

like image 631
Paul Reiners Avatar asked Apr 18 '16 17:04

Paul Reiners


1 Answers

Here's one way to do it

In [294]: arr = [s.shift(x).values[::-1][:3] for x in range(len(s))[::-1]]

In [295]: arr
Out[295]:
[array([  1.,  nan,  nan]),
 array([ 1.1,  1. ,  nan]),
 array([ 1.2,  1.1,  1. ]),
 array([ 1.3,  1.2,  1.1]),
 array([ 1.4,  1.3,  1.2])]

In [296]: pd.Series(arr, index=s.index)
Out[296]:
1    [1.0, nan, nan]
2    [1.1, 1.0, nan]
3    [1.2, 1.1, 1.0]
4    [1.3, 1.2, 1.1]
5    [1.4, 1.3, 1.2]
dtype: object
like image 105
Zero Avatar answered Oct 19 '22 02:10

Zero