左熊猫滚动对象



使用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

最新更新