在Pandas中,是否有任何快速方法可以使步长大小的滑动窗口重叠?我正在尝试在60秒的窗口和步长为1(窗口可以重叠)的窗口中沿每一列获取汇总指标(例如均值,标准差,百分位数,ecc。)。
我将写一个最小的例子来说明我想要的东西。
假设我们通过tmp = pd.DataFrame([1,2,3,4,5])
获得了以下数据帧
>>> tmp
0
0 1
1 2
2 3
3 4
4 5
我的结果窗口为2,步长为1,平均值为平均值
0
0 1.5
1 2.5
2 3.5
3 4.5
我的数据框大约有200000行和870列,所以我想要一个快速的解决方案。 熊猫的滚动功能似乎没有步长参数。 我尝试阅读类似的问题,但没有找到合适的解决方案。
感谢您的帮助。
编辑:
我尝试了类似df[columname].groupby(df.index // 60).std()
的解决方案,但窗口没有重叠并且步幅/步长不是1。
编辑2:我想要一个适用于任何步长的通用解决方案。
均值,窗口3和步长2的新示例:相同的初始数据帧tmp = pd.DataFrame([1,2,3,4,5])
。
在这种情况下,输出应为:
0
0 2
1 4
基本上,窗口采用前3个值(1、2和3),然后计算平均值,然后跳过2个位置(在本例中为值1和2),然后计算其他3个值(在本例中为3) ,4和5)。
如果阅读此书的任何人都在寻找步长为1的解决方案,@ Roy2012指出了在特定情况下适用的解决方案。
答案 0 :(得分:0)
您正在寻找的内容(至少在此示例中)称为滚动均值:
tmp.rolling(2).mean()
==>
0
0 NaN
1 1.5
2 2.5
3 3.5
4 4.5
如上面的第二个示例所示,如果您希望窗口更大而结果更少,请执行以下操作:
df = pd.DataFrame(range(1, 6)) # 1, 2, 3, 4, 5
df = df.rolling(3, center = True).mean()
# now select every second element.
df[(df.index % 2) == 1]
结果是:
0
1 2.0
3 4.0