You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中高效计算间隔n元素的m窗口滚动均值?

高效实现间隔元素的均值计算

问题背景

给定如下pandas Series:

import pandas as pd
s = pd.Series(range(50))

常规的相邻2元素滚动均值可以直接用rolling方法实现:

s.rolling(window=2, min_periods=2).mean()

现在需要调整需求:计算间隔3个元素的最后两个值的均值——即索引i对应的均值是s[i]和s[i-3]的平均值(仅当i≥3时有效,前3个索引返回NaN),预期结果如下:

0    NaN 
1    NaN
2    NaN
3    1.5  # (3+0)/2
4    2.5  # (4+1)/2
5    3.5  # (5+2)/2
6    4.5
...

最优解法:移位向量化操作

直接用shift方法获取前3位的元素,再和原序列做均值计算,这是性能最优的方案,完全基于pandas向量化运算,时间复杂度O(n):

result = (s + s.shift(3)) / 2

这个方法自动对前3个索引返回NaN,完全匹配需求的输出格式,逻辑直观易懂。

备选方案:自定义滚动窗口(适合复杂场景)

如果需要更灵活的自定义窗口逻辑,可以用rolling结合apply实现,但性能不如移位操作(因为apply是逐窗口遍历):

def custom_window_mean(window):
    # 窗口长度不足4时(对应索引0-2),返回空值
    if len(window) < 4:
        return pd.NA
    # 取窗口的第一个元素(对应i-3)和最后一个元素(对应i)计算均值
    return (window.iloc[0] + window.iloc[-1]) / 2

result = s.rolling(window=4, min_periods=4).apply(custom_window_mean)

这里窗口大小设为4(覆盖从i-3到i的范围),通过apply自定义取首尾元素计算均值,结果和移位方法一致,但只推荐在更复杂的窗口规则下使用。

内容的提问来源于stack exchange,提问作者smaica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:05:17