使用pandas 0.18.1,我想取一个单列数据框的滚动平均值。由于版本为0.18.0,因此使用rolling()对象完成。这些滚动对象的默认值是正确的。您可以通过一个布尔参数,center = true,将滚动对象与中心值对齐,但是似乎没有办法将其左对齐。这是一个例子:
df = pandas.DataFrame({'A': [2,3,6,8,20, 27]})
df
A
0 2
1 3
2 6
3 8
4 20
5 27
标准方法会自动对齐右侧,因此前两个in依件的值没有尺寸三的窗口:
: df.rolling(window=3).mean()
A
0 NaN
1 NaN
2 3.666667
3 5.666667
4 11.333333
5 18.333333
我们可以像这样中心一致的操作:
df.rolling(window=3).mean(center=True)
A
0 NaN
1 3.666667
2 5.666667
3 11.333333
4 18.333333
5 NaN
但是我要寻找的是:
df.rolling(3).mean()
A
0 3.666667
1 5.666667
2 11.333333
3 18.333333
4 NaN
5 NaN
我可以通过使用默认的权利对准来完成此操作,然后重新索引它,或逆转行的顺序,然后"正确地保持",但是这些都是应有的工作直截了当的操作。
我认为您可以使用shift
:
a = df.rolling(window=3).mean().shift(-2)
print (a)
A
0 3.666667
1 5.666667
2 11.333333
3 18.333333
4 NaN
5 NaN
另一个解决方案是在应用右键滚动窗口之前简单地逆转数据框/系列,然后再对其进行重新反向。类似:
In [1]: df["A"][::-1].rolling(3).mean()[::-1]
Out[1]:
0 3.666667
1 5.666667
2 11.333333
3 18.333333
4 NaN
5 NaN
Name: A, dtype: float64
比shift
的好处是,它应该在基于时间的窗口的情况下与可变大小的窗口一起使用。
您可以根据.rolling()
文档使用FixedForwardWindowIndexer
:
>>> df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]})
>>> df
B
0 0.0
1 1.0
2 2.0
3 NaN
4 4.0
...
>>> indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=2)
>>> df.rolling(window=indexer, min_periods=1).sum()
B
0 1.0
1 3.0
2 2.0
3 4.0
4 4.0