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

如何在Pandas中计算跨所有列的滚动窗口标准差?

解决DataFrame滚动窗口内全量数据的标准差计算问题

要实现每个滚动窗口内所有列数据的整体标准差,而非按列单独计算,可借助Pandas的rolling().apply()方法,自定义窗口处理逻辑:

具体实现步骤

  1. 定义自定义函数,将滚动窗口内的所有数据展平为一维数组,再计算标准差;
  2. 将该函数传入rolling().apply()完成计算。

示例代码

import pandas as pd
import numpy as np

# 示例数据
df = pd.DataFrame({'col1': [1,2,3,4,5,6], 'col2': [-1,-2,-3,-4,-5,-6], 'col3': [1,2,3,4,5,6]})

# 自定义窗口处理函数:展平数据并计算总体标准差(与np.std默认行为一致)
def calculate_window_std(window):
    flat_data = window.values.flatten()
    # 若需要样本标准差(与pandas.std默认逻辑一致),将ddof参数设为1即可
    return np.std(flat_data, ddof=0)

# 设置窗口大小并执行计算
window_size = 2
rolling_std = df.rolling(window=window_size).apply(calculate_window_std)

# 查看结果
print(rolling_std)

结果说明

  • 窗口大小为2时,索引1对应的结果是行0、行1所有6个值的标准差(即np.std([1,-1,1,2,-2,2], ddof=0)的结果1.5);
  • 索引2对应的结果是行1、行2所有6个值的标准差,后续行以此类推。

原生rolling().std()的局限性

原生方法是按列独立计算每个窗口内该列数据的标准差,无法直接实现跨列的全量数据标准差计算,因此需要自定义apply逻辑来满足需求。

内容的提问来源于stack exchange,提问作者W. Walter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 13:41:14