【发布时间】:2019-01-01 11:38:28
【问题描述】:
我在 Pandas 数据框中有一些数据。我想根据该数据计算移动平均值,包括最多 N 个尾随行和 Q 个前导行:
import pandas
my_data = pandas.DataFrame({
'values': [5.0, 4.0, 3.0, 5.0, 5.0, 6.0, 4.0, 6.0, 7.0, 4.0, 5.0, 5.0]
})
my_data
values
0 5.0
1 4.0
2 3.0
3 5.0
4 5.0
5 6.0
6 4.0
7 6.0
8 7.0
9 4.0
10 5.0
11 5.0
N=2
Q=3
get_moving_average(my_data, lagging=N, leading=Q)
values mavg
0 5 4.250000
1 4 4.400000
2 3 4.666667
3 5 4.500000
4 5 4.833333
5 6 5.500000
6 4 5.333333
7 6 5.333333
8 7 5.166667
9 4 5.400000
10 5 5.250000
11 5 4.666667
在这里,第 0 行的移动平均值为 4.25 - 单元格 0 的值加上 0 个粗体滞后行(因为没有)和 3 个斜体前导行(单元格的值 1:3 - 所以(5.0 + 4.0 + 3.0 + 5.0) / 4.0 = 17.0 / 4.0 = 4.25
第 1 行的移动平均线包括上述所有内容,还包括粗体的尾随行 0(因为我们接受 2 个滞后行,但只有一个存在),产生 (5.0 + 4.0 + 3.0 + 5.0 + 5.0) / 5.0 = 22.0 / 5.0 = 4.4。
等等。但是,pandas 的 rolling 方法只接受一个窗口参数,而不是允许选择每一边的大小,并且似乎存在数据不足的问题。
是否有替代滚动的替代方法,或者我需要自己滚动?
【问题讨论】:
-
还没有测试过,但有没有可能
my_data.expanding(4, center=False).mean()? -
不,因为那只是一面。我需要双方控制