Ich habe folgende Datenrahmen von Kundenvertrieb Geschichte (es ist nur ein Teil davon, die tatsächliche Datenrahmen mehr als 70k Zeilen):Pandas: Rollzeitgewichtete Durchschnitt bewegt sich mit GROUPBY
import pandas as pd
import datetime as DT
df_test = pd.DataFrame({
'Cus_ID': ["T313","T348","T313","T348","T313","T348","T329","T329","T348","T313","T329","T348"],
'Value': [3,2,3,4,5,3,7.25,10.25,4.5,11.75,6.25,6],
'Date' : [
DT.datetime(2015,10,18),
DT.datetime(2015,11,14),
DT.datetime(2015,11,18),
DT.datetime(2015,12,13),
DT.datetime(2015,12,19),
DT.datetime(2016,1,24),
DT.datetime(2016,1,31),
DT.datetime(2016,2,17),
DT.datetime(2016,3,28),
DT.datetime(2016,3,31),
DT.datetime(2016,4,3),
DT.datetime(2016,4,16),
]})
Ich möchte Fügen Sie dem Datenframe eine neue Spalte hinzu, um das Ergebnis des zeitgewichteten Durchschnitts der letzten 90 Tage für diese Kunden anzuzeigen.
Erwartetes Ergebnis (Spalte Value_Result
):
Cus_ID Date Value Value_Result
0 T313 2015-10-18 3.00 NaN (No 90days history)
1 T348 2015-11-14 2.00 NaN (No 90days history)
2 T313 2015-11-18 3.00 3 (3*31)/31
3 T348 2015-12-13 4.00 2 (2*29)/29
4 T313 2015-12-19 5.00 3 (3*62+3*31)/(62+31)
5 T348 2016-01-24 3.00 2.743 (4*42+2*71)/(42+71)
6 T329 2016-01-31 7.25 NaN (No 90days history)
7 T329 2016-02-17 10.25 7.25 (7.25*17)/17
8 T348 2016-03-28 4.50 3 (3*64)/64
9 T313 2016-03-31 11.75 NaN (No 90days history)
10 T329 2016-04-03 6.25 8.516 (10.25*46+7.25*63)/(46+63)
11 T348 2016-04-16 6.00 3.279 (4.5*19+3*83)/(19+83)
Ich habe versucht, groupby('Cus_ID')
zu verwenden und das Walzen anwenden, aber ich habe Schwierigkeiten zu schreiben um die Funktion nur 90 Tage nach hinten betrachten.
Jede Eingabe sehr geschätzt.
Ähnlich wie [diese Frage] (http://stackoverflow.com/q/15771472/5276797). Eine Option ist das tägliche Resampling (das ist die akzeptierte Antwort). Wenn das Resampling keine Option ist, bietet eine andere Antwort eine anzuwendende Ad-hoc-Funktion. – IanS