假设我有以下代码:
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])
这会产生以下 :
1 1.0
2 1.1
3 1.2
4 1.3
5 1.4
现在我想要创建的是一个大小为 n
的滚动窗口,但我不想获取每个窗口的均值或标准差,我只需要数组。所以,假设 n = 3
。我想要一个转换,在给定输入 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])
我该怎么做?
最佳答案
这里有一个方法可以做到这一点
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
关于python - 创建一个 Pandas 滚动窗口系列数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36701099/