熊猫滑动窗口,步长为

时间:2020-06-25 15:22:56

标签: python pandas dataframe

在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指出了在特定情况下适用的解决方案。

1 个答案:

答案 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