如何在没有 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 中的 mean 方法是不是在计算中包含 nan ?
pandas.DataFrame.agg 不适用于 np.std?