python - 创建一个 Pandas 滚动窗口系列数组

标签 python numpy pandas

假设我有以下代码:

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/

相关文章:

python - 如何从 openstack Shadow 迁移到 openstacksdk?

python - 使用 matplotlib 求解多边形中的点

python - np_utils.to_categorical 反向

python - 使用占位符将数组大小调整为不可能的形状

python - 使用 pandas python 函数根据其他列的值添加新列

python - Pandas 列创建方法

python - 无法使用python scrapy框架在postgre中插入日期

python - Numpy 来自数组,为每个元素创建一个矩阵 N*M,其中所有值都设置为元素,无需 for 循环

python - 在 pandas 数据框中以字符串格式对日期进行排序?

python - 属性错误 : FUN instance has no attribute '__trunc__'