Python Pandas:自定义滚动窗口计算

时间:2017-12-30 03:38:52

标签: python pandas rolling-average

我希望在滚动窗口中获取最新值,并将其除以所述窗口中所有数字的平均值。

我尝试了什么:

df.a.rolling(window=7).mean()/df.a[-1] 

这不起作用,因为df.a[-1]始终是整个数据集中最新的。我需要窗口的最后一个值。

我今天做了很多搜索。我可能正在搜索错误的术语,或者不理解结果,因为我没有得到任何有用的东西。

任何指针都会受到赞赏。

1 个答案:

答案 0 :(得分:2)

滚动窗口上的聚合(使用mean())返回一个pandas Series对象,其索引与原始列相同。您可以简单地聚合滚动窗口,然后将原始列除以聚合值。

import numpy as np
import pandas as pd

df = pd.DataFrame(np.arange(30), columns=['A'])

df
# returns:
     A
0    0
1    1
2    2
...
27  27
28  28
29  29

您可以使用滚动均值获得具有相同索引的系列。

df.A.rolling(window=7).mean()
# returns:
0      NaN
1      NaN
2      NaN
3      NaN
4      NaN
5      NaN
6      3.0
7      4.0
...
26    23.0
27    24.0
28    25.0
29    26.0

因为它已编入索引,您可以简单地除以df.A以获得所需的结果。

df.A.rolling(window=7).mean() / df.A
# returns:
0          NaN
1          NaN
2          NaN
3          NaN
4          NaN
5          NaN
6     0.500000
7     0.571429
8     0.625000
9     0.666667
10    0.700000
11    0.727273
12    0.750000
13    0.769231
14    0.785714
15    0.800000
16    0.812500
17    0.823529
18    0.833333
19    0.842105
20    0.850000
21    0.857143
22    0.863636
23    0.869565
24    0.875000
25    0.880000
26    0.884615
27    0.888889
28    0.892857
29    0.896552