1

我正在寻找滚动窗口中的最新值并将其除以所述窗口中所有数字的平均值。

我尝试了什么:

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

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

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

任何指针将不胜感激。

4

1 回答 1

3

滚动窗口上的聚合(使用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
于 2017-12-30T03:49:21.413 回答