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

使用滚动窗口应用Scipy独立样本ttest的实现问题咨询 - 第2部分

Pandas滚动窗口执行独立样本t检验的修正方案

错误原因

原代码无法运行主要有两个核心问题:

  • pandas rolling.apply 默认按单列迭代处理,传入函数的参数是一维Series,无法同时读取bias和score两列数据,调用字段索引会直接报错
  • 自定义函数返回的是二元组,而rolling.apply默认要求返回单个标量,直接赋值给两个新列会出现维度不匹配问题

修正方案

我们可以通过对索引做滚动遍历的方式,让每个窗口能读取到完整的行数据,同时调整函数返回格式为Pandas Series,实现多结果列的直接赋值,完整可运行代码如下:

import pandas as pd
from scipy.stats import ttest_ind

# 独立性检验辅助函数,调整返回格式为Series
def conduct_ttest(data, variable_1="bias", variable_2="score", nan_policy="omit"):
    test_result = ttest_ind(data[variable_1], data[variable_2], nan_policy=nan_policy)
    test_statistic = test_result[0]
    p_value = test_result[1]
    return pd.Series([test_statistic, p_value], index=["test_statistic", "p_value"])

window_size = 5
# 对索引做滚动处理,保证每个窗口可以获取对应行的全量字段
data[["test_statistic", "p_value"]] = (
    data.index.to_series()
    .rolling(window_size)
    .apply(lambda idx_range: conduct_ttest(data.loc[idx_range]))
)

结果说明

  • 前window_size-1行(也就是前4行)由于窗口数据不足,计算结果为NaN,符合滚动计算的常规逻辑
  • 新生成的test_statistic和p_value列会直接追加到原DataFrame中,无需额外拼接操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:36:03