我在熊猫数据框里有一些数据。我想根据这些数据计算移动平均值,包括最多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—so(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方法只对window使用一个参数,而不允许选择每边的大小,并且在数据不足的情况下似乎存在问题。你知道吗
有没有一个替代滚动涵盖这一点,或我需要滚动我自己的?你知道吗
我不确定这将适用于所有情况下没有进一步的测试。你知道吗
让我们发挥创意。在“滚动窗口”中向后使用
rolling
和shift
,以获得适当的尾随行和前导行计数。为了在滚动平均值处处理NaN,让我们向后滚动fillna
。你知道吗输出:
步骤:
在你的例子中,用N(滞后)+Q(超前)和总电流(T)在整个时间间隔内进行滚动计算。你知道吗
现在,让我们使用
shift
向后移动计算,使窗口如预期的那样,N滞后,Q超前,所以shift-Q输出:
现在要处理数据帧末尾的那些NaN值,我们反向进行滚动计算,并使用fillna填充原始值。[::-1]是一个反转元素,从末尾开始滚动到开头,然后使用[::-1]再次翻转以与原始结果对齐。你知道吗
输出:
使用fillna在第一个序列上搜索第二个序列以获得:
输出:
相关问题 更多 >
编程相关推荐