Pandas MultiIndex DataFrame.rolling offset

¿Por qué no puedo usar un desplazamiento cuando se desplaza un DataFrame de múltiples índices? Por ejemplo, con:

 rng = pd.date_range('2017-01-03', periods=20, freq='8D') i = pd.MultiIndex.from_product([['A','B','C'], rng], names=['Name','Date']) df = pd.DataFrame(np.random.randn(60), i, columns=['Vals']) 

Si trato de agrupar y rodar con un desplazamiento, obtengo ” ValueError: la ventana debe ser un entero “:

 df['Avg'] = df.groupby(['Name'])['Vals'].rolling('30D').mean() # << Why doesn't this work? 

No es que estas siguientes variantes satisfagan mis necesidades, pero tenga en cuenta que agrupar y rodar con un int funciona:

 df['Avg'] = df.groupby(['Name'])['Vals'].rolling(4).mean() 

Y puedo rodar con un desplazamiento en un subconjunto de un solo índice del DataFrame:

 d = df.loc['A'] d['Avg'] = d['Vals'].rolling('30D').mean() 

Si es realmente imposible rodar con compensaciones en DataFrames de índice múltiple, ¿cuál sería la solución más eficiente para aplicar una a cada elemento de índice de nivel 0?

Para utilizar un desplazamiento como ’30D’ necesita un índice de fecha simple. En este caso, la forma más sencilla de lograrlo es mover ‘Nombre’ fuera del índice con reset_index(level='Name') , dejándole solo con ‘Fecha’ como índice:

 df['Avg'] = df.reset_index(level='Name').groupby(['Name'])['Vals'].rolling('30D').mean()