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?
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
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With