我想计算时间序列的滚动均值,但使用不同窗口大小的列表。
实际上,我可以使用for循环来实现这一点:
def rolling_mean(series, *vals):
for i in vals:
m = pd.rolling_mean(series, window=i)
print (m)
但是我想尝试找到一种可以更好地利用Pandas功能的矢量化方法。最初我会想象这样的事情会很完美:
def rolling_mean(series, *vals):
df = pd.rolling_mean(series, window=vals)
print (df)
其中上述方法将返回一个滚动的DataFrame对象,意味着该系列参数的窗口长度不同。不幸的是,rolling_mean()窗口参数只接受整数。我想不出任何其他方法来实现这一目标。
是否有矢量化方法将* vals值传递给rolling_mean()?
答案 0 :(得分:0)
例如,您想要计算windows = [20, 40, 60, 80, 120, 250]
#create a new dataframe
rolling_means = pd.DataFrame()
windows = [20, 40, 60, 80, 120, 250]
labels = ['20', '40', '60', '80', '120', '250']
for window,label in zip(windows, labels):
rolling_means[label] = pd.rolling_mean(series, window = window)
这将创建一个数据框,每列都是不同的滚动平均值。
您需要做的就是修剪数据,以便有完整的数据点进行比较:
rolling_means.dropna(how = 'any', inplace=True)