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

Pandas自定义步长滑动窗口的多列标准差与均值计算实现

实现方案

自定义窗口逻辑实现

你需要的每10行右移一次左边界的窗口逻辑,可以通过pandas动态滚动窗口实现,无需手动逐行遍历,代码如下:

import pandas as pd

# 若df不是连续0基整数索引,可先执行 df = df.reset_index(drop=True) 保证行号连续
# 生成每个行位置对应的窗口大小
window_size_list = [idx + 1 - (idx // 10) for idx in range(len(df))]
# 批量计算所有列的自定义窗口标准差,空值填0,添加SD前缀
sd_result = df.rolling(window=window_size_list).std().fillna(0).add_prefix("SD")
# 合并到原DataFrame
output = df.join(sd_result)

如果你的pandas版本低于1.3不支持动态窗口大小,可使用兼容写法:

import pandas as pd
import numpy as np

def calc_custom_window(series, calc_func):
    res = []
    for idx in range(len(series)):
        left_bound = idx // 10
        window_data = series.iloc[left_bound: idx+1]
        res.append(calc_func(window_data))
    return pd.Series(res, index=series.index)

sd_result = df.apply(lambda x: calc_custom_window(x, np.std)).fillna(0).add_prefix("SD")
output = df.join(sd_result)

均值计算规则

是的,你只需要把代码中的std()替换为mean()即可复用完全相同的窗口逻辑计算均值,示例如下:

# 动态窗口写法计算均值
mean_result = df.rolling(window=window_size_list).mean().fillna(0).add_prefix("MEAN")
# 合并标准差和均值结果到原表
output = df.join(sd_result).join(mean_result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:09:03