如何在没有 Pandas STD 或 Mean 函数的情况下计算滚动 STD?

Posted

技术标签:

【中文标题】如何在没有 Pandas STD 或 Mean 函数的情况下计算滚动 STD?【英文标题】:How Do I Calculate Rolling STD Without Pandas STD or Mean functions? 【发布时间】:2021-12-03 07:56:30 【问题描述】:

我想将 Rolling STD 合并到我的 Rolling Mean 函数中。由于它产生的 Nan 值,我不能使用 Pandas std。我不确定如何计算平方和。有什么建议?我需要列表理解吗?

def rolling_mean_std(x, wd_size=3):
    
    rolling_mean, rolling_std = None, None
    
    i = 0
    
    rolling_mean = []
    rolling_std = []
    while i < len(x) - wd_size + 1:
        if i<=wd_size:
            this_window = x[0 : 1 + i]
            
            window_average = sum(this_window) / (i+1)
            ##Edit to include std calculation
            window_std = sum((x - window_average) ** 2 for x in this_window)/(i+1)
            squirt=math.sqrt(window_std)
            rolling_mean.append(window_average)
            rolling_std.append(math.sqrt(squirt)) 
                
            i += 1
        else:
            this_window = ser[i : i + wd_size]
            window_average = sum(this_window) / wd_size
            ##Edit to include std calculation
            window_std = sum((x - window_average) ** 2 for x in this_window)/wd_size
            squirt=math.sqrt(window_std)
            rolling_mean.append(window_average)
            rolling_std.append(math.sqrt(squirt))
            i += 1
    
            
    return np.array(rolling_mean) #np.array(rolling_std)

alist = [2,4,5,7,9,10,21,89,43,90,13,100,1,45]
x = pd.Series(alist)

rolling_mean_std(x, wd_size=3)

【问题讨论】:

【参考方案1】:

您可以尝试使用 Pandas rolling 函数计算每个滚动窗口的标准差,并将每个标准差附加到一个列表中以获得滚动标准差。滚动方式也一样。

例如:

wd_size = 3
alist = [2,4,5,7,9,10,21,89,43,90,13,100,1,45]
x = pd.Series(alist)

rolling_mean = []
rolling_std = []
for i in x.rolling(window = wd_size):
    rolling_mean.append(np.mean(i))
    rolling_std.append(np.std(i))

【讨论】:

以上是关于如何在没有 Pandas STD 或 Mean 函数的情况下计算滚动 STD?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用pandas.core.window.Window.mean函数?

pandas的resample重采样

pandas 中的 mean 方法是不是在计算中包含 nan ?

pandas.DataFrame.agg 不适用于 np.std?

Pandas 定义在不同数据帧中创建新列时要调用的 Z_score 函数

数据分析师-pandas统计基础