在R中,您可以使用指定的窗口计算滚动平均值,该窗口每次可以移动指定的量。
然而,也许我只是没有找到它的任何地方,但它似乎不像你可以在Pandas或其他一些Python库?
有人知道解决这个问题的方法吗?我给予个例子来说明我的意思:
这里我们有两周一次的数据,我计算的是两个月的移动平均值,每移动1个月,即2行。
所以在R中我会这样做:two_month__movavg=rollapply(mydata,4,mean,by = 2,na.pad = FALSE)
在Python中没有等价物吗?
编辑1:
DATE A DEMAND ... AA DEMAND A Price
0 2006/01/01 00:30:00 8013.27833 ... 5657.67500 20.03
1 2006/01/01 01:00:00 7726.89167 ... 5460.39500 18.66
2 2006/01/01 01:30:00 7372.85833 ... 5766.02500 20.38
3 2006/01/01 02:00:00 7071.83333 ... 5503.25167 18.59
4 2006/01/01 02:30:00 6865.44000 ... 5214.01500 17.53
6条答案
按热度按时间daupos2t1#
因此,我知道这个问题已经提出很久了,因为我遇到了同样的问题,当处理长时间序列时,您确实希望避免对您不感兴趣的值进行不必要的计算。由于Pandas滚动方法不实现
step
参数,因此我使用numpy编写了一个解决方案。它基本上是this link中的解和BENY提出的索引的组合。
oxf4rvwz2#
你可以再次使用滚动,只需要一点点工作与你分配索引
这里
by = 2
wrrgggsh3#
如果数据大小不是太大,这里有一个简单的方法:
vuktfyat4#
现在,这对于一维数据数组来说有点大材小用了,但是你可以简化它并提取出你所需要的。由于Pandas可以依赖numpy,你可能想检查一下它们的滚动/跨步功能是如何实现的。20个连续数字的结果。一个7天的窗口,跨步/滑动2
这里是我使用的代码,没有文档的主要部分。它是从numpy中的strided函数的许多实现中派生出来的,可以在这个网站上找到。有变体和化身,这只是另一个。
我没有指出,您可以创建一个输出,并将其作为列追加到panda中。
8qgya5xd5#
滚动后使用
Pandas.asfreq()
wh6knrhe6#
从pands 1.5.0开始,
rolling()
有一个step参数,应该可以达到这个目的。请参阅:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rolling.html