I was motivated to use pandas rolling
feature to perform a rolling multi-factor regression (This question is NOT about rolling multi-factor reg
Made the following modifications to the above answer since I needed to return the entire rolling window as is done in pd.DataFrame.rolling()
def roll(df, w):
roll_array = np.dstack([df.values[i:i+w, :] for i in range(len(df.index) - w + 1)]).T
roll_array_full_window = np.vstack((np.empty((w-1 ,len(df.columns), w)), roll_array))
panel = pd.Panel(roll_array_full_window,
items=df.index,
major_axis=df.columns,
minor_axis=pd.Index(range(w), name='roll'))
return panel.to_frame().unstack().T.groupby(level=0)