熊猫数据帧中的非重叠滚动窗口

spa*_*dfs 9 python dataframe pandas

我熟悉 Pandas 滚动窗口函数,但它们的步长始终为 1。我想在 Pandas 中执行移动聚合函数,但条目不重叠。

在此数据框中: 在此处输入图片说明

df.rolling(2).min()
Run Code Online (Sandbox Code Playgroud)

将产生:

N/A 519 566 727 1099 12385

但我想要一个步长为 2 的固定窗口,所以它会产生:

519 727 12385

因为对于固定窗口,它应该通过该窗口的大小来代替。

Ita*_*tay 10

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

df.rolling(n).min()[n-1::n]
Run Code Online (Sandbox Code Playgroud)

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

df.groupby(df.index // n).min()
Run Code Online (Sandbox Code Playgroud)

我没有检查它是否确实更有效,但我相信它应该是。

  • “rolling()”的“Wall time: 2min 32s”和“groupby()”的“Wall time: 7.08s”。这是在具有 1602661 行的 Dataframe 上。 (3认同)