首页 > 解决方案 > 带间隔的滚动平均值

问题描述

如何有效地计算固定间隔的滚动平均值?

import numpy as np
import pandas as pd

n=50
s = pd.Series(data = np.random.randint(0,10,n), index = pd.date_range(pd.to_datetime('today').floor('D'), freq='D', periods = n)) 

例如,在上面的系列中,间隔为 4 天,元素数量为 3,新系列的第 i 个元素 t=t_i将具有s_i =1/3 *( s_(i-4) + s_(i-4*2) + s_(i-4*3) )

标签: pythonpandasdatetimemeanrolling-computation

解决方案


你检查过 pandas.DataFrame.rolling吗?它可能有你要找的东西。

如果我理解正确,这是一个包含 1 到 50 的数组的示例:

interval = 4
window = 3
data = np.linspace(1,50,50)
arr = pd.Series(np.array(data)[::interval]) #subset data by every 4th value
indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=window) #look forward 3 spaces on every 4th value
arr.rolling(indexer).mean() #take the mean of the window

输出将是一个数组 [5, 9, 13, 17, ...],5 对应于 1、5 和 9 的平均值,9 是 5、9 和 13 的平均值。


推荐阅读