定义自己的roll
我们可以创建一个接受窗口大小参数w和任何其他关键字参数的函数。我们使用它来构建一个新的DataFrame,在其中,我们将调用groupby,同时通过kwargs传递关键字参数。
注意:我不需要使用stride_tricks.as_strided,但它很简洁,在我看来是合适的。
from numpy.lib.stride_tricks import as_strided as stride
import pandas as pd
def roll(df, w, **kwargs):
v = df.values
d0, d1 = v.shape
s0, s1 = v.strides
a = stride(v, (d0 - (w - 1), w, d1), (s0, s0, s1))
rolled_df = pd.concat({
row: pd.DataFrame(values, columns=df.columns)
for row, values in zip(df.index, a)
})
return rolled_df.groupby(level=0, **kwargs)
roll(df, 2).mean()
Open High Low Close
0 133.0350 133.2975 132.8250 132.930
1 132.9325 133.1200 132.6750 132.745
2 132.7425 132.8875 132.6075 132.710
3 132.7075 132.7875 132.6000 132.720
我们还可