2016-06-27 14 views
12

Pandas Mit 0.18.1, würde Ich mag den gleitenden Durchschnitt der eine einspaltige Datenrahmen nehmen. Seit Version 0.18.0 geschieht dies mit rolling() - Objekten. Der Standardwert für diese rollenden Objekte ist rechtsbündig. Es gibt eine boolean Argument Sie passieren können, Mitte = True, das Rollen Objekt auf den Mittenwert auszurichten, aber es scheint nicht, einen Weg, um es nach links ausrichten. Hier ein Beispiel:Links ausrichten ein Pandas Roll Objekt

df = pandas.DataFrame({'A': [2,3,6,8,20, 27]}) 
df 
    A 
0 2 
1 3 
2 6 
3 8 
4 20 
5 27 

Die Standardmethode richtet automatisch nach rechts, so dass es keinen Wert an den ersten beiden indecies mit einem Fenster der Größe drei:

df.rolling(window=3).mean() 
      A 
0  NaN 
1  NaN 
2 3.666667 
3 5.666667 
4 11.333333 
5 18.333333 

Wir können den Betrieb zu zentrieren wie folgt aus:

df.rolling(window=3).mean(center=True) 
      A 
0  NaN 
1 3.666667 
2 5.666667 
3 11.333333 
4 18.333333 
5  NaN 

Aber was ich suche, ist dies:

df.rolling(3).mean() 
      A 
0 3.666667 
1 5.666667 
2 11.333333 
3 18.333333 
4  NaN 
5  NaN 

Ich kann dies erreichen, indem es mit der Standard rechten Ausrichtung zu tun, und dann neu indizieren, oder durch die Reihenfolge der Reihen umgekehrt und es dann tun „rechtsbündig“, aber diese sind Abhilfen für das, was sein soll, eine unkomplizierte Operation.

Antwort

13

Ich glaube, Sie shift verwenden können:

a = df.rolling(window=3).mean().shift(-2) 
print (a) 
      A 
0 3.666667 
1 5.666667 
2 11.333333 
3 18.333333 
4  NaN 
5  NaN 
+0

Dies ist eine gute Lösung, obwohl ich ein direkterer Weg dorthin war hatte gehofft, es zu tun. Ich schätze, dass Funktionalität noch nicht in den rollenden Objekten ist. – Alex

+0

Ja, ich glaube, du hast recht. Ich sehe es auch nie. – jezrael

+4

Ich akzeptierte diese Antwort, da die gewünschte Funktionalität nicht wirklich in den Pandas ist Objekte rollen und dass dies die eleganteste Lösung. Wenn man diese linke Ausrichtung, ein wenig mehr dynamisch, die Fenstergröße eingestellt mit einem variablen w, und dann wird das Argument in der .shift() Methode könnte sein, w-1 könnte verwalten wollte. – Alex

Verwandte Themen