Utilizzando pmi 0.18.1, vorrei prendere la media mobile di un dataframe a una colonna. Dalla versione 0.18.0, questo viene fatto con gli oggetti rolling(). L'impostazione predefinita per questi oggetti rotanti deve essere giustificata a destra. C'è un argomento booleano che puoi passare, center = True, per allineare l'oggetto rotolante al valore centrale, ma non sembra esserci un modo per farlo allineare a sinistra. Ecco un esempio:Allineare a sinistra un oggetto rotante panda
df = pandas.DataFrame({'A': [2,3,6,8,20, 27]})
df
A
0 2
1 3
2 6
3 8
4 20
5 27
Il metodo standard allinea automaticamente verso destra, quindi non c'è alcun valore alle prime due indecies con una finestra di dimensione tre:
df.rolling(window=3).mean()
A
0 NaN
1 NaN
2 3.666667
3 5.666667
4 11.333333
5 18.333333
Possiamo centrare allineare l'operazione in questo modo:
df.rolling(window=3).mean(center=True)
A
0 NaN
1 3.666667
2 5.666667
3 11.333333
4 18.333333
5 NaN
Ma quello che sto cercando è questo:
df.rolling(3).mean()
A
0 3.666667
1 5.666667
2 11.333333
3 18.333333
4 NaN
5 NaN
È possibile farlo eseguendo l'allineamento di destra predefinito, quindi reindicizzandolo o invertendo l'ordine delle righe e quindi eseguendo "allineato a destra", ma queste sono soluzioni per ciò che dovrebbe essere un'operazione diretta.
Questa è una buona soluzione, anche se speravo ci fosse un modo più diretto per farlo. Immagino che la funzionalità non sia ancora presente negli oggetti rotanti. – Alex
Sì, penso che tu abbia ragione. Non lo vedo mai. – jezrael
Ho accettato questa risposta perché la funzionalità desiderata non è realmente negli oggetti rolling di panda e ciò fornisce la soluzione più elegante. Se si volesse gestire questo allineamento a sinistra un po 'più dinamicamente, la dimensione della finestra potrebbe essere impostata con una variabile w, e quindi l'argomento nel metodo .shift() potrebbe essere w-1. – Alex