Pandas数据框中不重叠的滚动窗口

14
我熟悉Pandas的滚动窗口函数,但它们的步长始终为1。我想在Pandas中执行一种移动聚合函数,但条目不重叠。
在这个数据框中:enter image description here
df.rolling(2).min()

将产生:

N/A 519 566 727 1099 12385

但我想要一个步长为2的定长窗口,因此它应输出:

519 727 12385

因为在固定窗口下,应该按窗口大小进行步进。


你的例子中平均数在哪里? - Itay
我在这里使用了 min(),因为数字很大,所以更容易说明我要找的内容。虽然使用平均值,但我仍想要一个固定窗口的聚合函数。 - sparkonhdfs
你是在询问 df.groupby(np.arrange(0,len(df),2)//2).min) 吗? - Quang Hoang
1个回答

17

rolling函数中没有这样的内置参数,但是您可以计算通常的滚动函数,然后跳过每个第n行(在您的情况下n=2)。

df.rolling(n).min()[n-1::n]

正如您在评论中提到的那样,这可能会导致许多冗余计算被忽略(特别是如果n很大)。 相反,您可以使用以下代码将数据分成大小为n的分组:

df.groupby(df.index // n).min()

我没有检查它是否真的更有效率,但我相信它应该是更好的选择。


1
问题在于对于一个大的数据框,它会做很多额外的计算,而最终这些计算结果会被丢弃。 - sparkonhdfs
1
第二种方法效果非常好。我对两个计算进行了时间检查: - sparkonhdfs
5
对于具有1602661行的数据框,rolling()函数的“墙上时间”为2分32秒,而groupby()函数的“墙上时间”为7.08秒。 - sparkonhdfs
很好。n=2? - Itay
1
实际上 n = 1000,因为 DF 的大小为 1602661 行。我使用的聚合函数也是一个 lambda,所以 mean() 可能会更快。 - sparkonhdfs
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接