Sie können die Methode rolling()
verwenden, um auf die Elemente einer Pandas-Serie innerhalb eines angegebenen Fensters zuzugreifen. Dann können Sie eine Lambda-Funktion verwenden, um den Mittelwert für die Elemente in diesem Fenster zu berechnen. Um die drei Elemente auf der linken Seite des aktuellen Elements aufzunehmen, verwenden Sie eine Fenstergröße von 4
:
In [39]: import pandas as pd
In [40]: S = pd.Series([3, 5, 6, 7, 4, 6, 7, 8])
In [41]: S.rolling(4).apply(lambda x: pd.np.mean(x))
Out[41]:
0 NaN
1 NaN
2 NaN
3 5.25
4 5.50
5 5.75
6 6.00
7 6.25
dtype: float64
Sie werden bemerken, dass es fehlende Werte für die ersten drei Elemente. Dies ist so, weil Sie erst ab dem vierten Element ein Fenster der Größe 4
beginnen können. Wenn Sie jedoch mit kleineren Fenstern für die ersten Elemente berechnen möchten, können Sie das Argument min_periods
die kleinste gültige Fenstergröße angeben:
In [42]: S.rolling(4, min_periods=1).apply(lambda x: pd.np.mean(x))
Out[42]:
0 3.000000
1 4.000000
2 4.666667
3 5.250000
4 5.500000
5 5.750000
6 6.000000
7 6.250000
dtype: float64
Having said that, müssen Sie das Lambda nicht brauchen der erste Platz - ich habe es nur aufgenommen, weil Sie explizit nach Lambdas gefragt haben. Das Verfahren rolling()
schafft ein Rolling
Objekt, das eine eingebaute in mean
Funktion hat, die Sie verwenden können, etwa so:
In [43]: S.rolling(4).mean()
Out[43]:
0 NaN
1 NaN
2 NaN
3 5.25
4 5.50
5 5.75
6 6.00
7 6.25
dtype: float64
Wenn alle Funktion Zugriff auf das Element hat, können Sie nicht ... aber Sie sollten mehr Details angeben. Wie, warum muss es eine "Lambda" -Funktion sein? –
Weil ich mehr über die Möglichkeiten dieses Features erfahren möchte. Haben Sie eine Alternative, ohne eine For-Schleife zu verwenden? – JPV