我有一个数据集,需要按组计算滚动标准偏差和平均值。
Average_SP7 = dogs.groupby(by="name")["S"].transform(lambda x: x.rolling(7, 1).mean())
StdDevFin7 = dogs.groupby(by="name")["F"].transform(lambda x: x.rolling(7,1).std())
我知道就它而言,建议不要使用转换和应用。
我设法通过使用 numpy 卷积来计算滚动平均值,这大大加快了速度。
grouped= df.groupby(by=grp_by)[attr]
s = [[], []]
for k, group in grouped:
convolved_SP = np.convolve(group, np.ones(window_size))
convolved_SP = convolved_SP[:-(window_size - 1)]
divisor = np.ones(len(convolved_SP)) * window_size
divisor[:min(len(divisor), window_size-1)] = np.arange(1, min(len(divisor) + 1, window_size))
convolved_SP = convolved_SP / divisor
s[0].extend(group.index)
s[1].extend(convolved_SP)
return_s = pd.Series(s[1], index=s[0])
return_s.sort_index(inplace=True)
Is 可以使用矢量化方法进行滚动标准偏差。我知道你需要滚动平均值,所以也许我可以在我的代码上构建。
输入:
F
name
beg It xiam 11.0
beg It xiam 12.0
beg It xiam 13.0
beg It xiam 7.0
beg It xiam 5.5
名称“beg It xiam”的滚动标准差。
F
name
beg It xiam NaN
beg It xiam 0.707107
beg It xiam 1.000000
beg It xiam 2.629956
beg It xiam 3.271085