Ich habe eine CSV-Datei mit vier Spalten: Datum, Großhändler, Produkt und Vertrieb. Ich suche nach dem Durchschnitt der letzten 52 Wochen Verkäufe für jede Produkt- und Großhandelskombination an jedem Datum. Es bedeutet, was der durchschnittliche vorherige Verkauf von Produkt 'A' beim Großhändler 'B' zum Zeitpunkt 'C' in den letzten 52 Wochen war.So finden Sie den Durchschnitt der letzten 52 Wochen Umsatz zu jeder Zeit in Python
Zum Beispiel kennen wir den Verkauf von Produkt 'A' beim Großhändler 'B' am Jan., April, Mai, Aug, die 100, 200, 300, 400 sind. Nehmen wir an, wir haben keine Aufzeichnungen vor Jan. So ist der Durchschnitt des vorherigen Verkaufs von Produkt 'A' im Großhändler 'B' bei Apr gleich 100/1, und bei Mai ist gleich (200 + 100)/2 und im August ist (300 + 200 + 100)/3.
Die folgende Tabelle zeigt meine Daten:
date wholesaler product sales
12/31/2012 53929 UPE54 4
12/31/2012 13131 UPE55 1
2/23/2013 13131 UPE55 1156
4/24/2013 13131 UPE55 1
12/1/2013 83389 UPE54 9
12/17/2013 83389 UPE54 1
12/18/2013 52237 UPE54 9
12/19/2013 53929 UME24 1
12/31/2013 82204 UPE55 9
12/31/2013 11209 UME24 4
12/31/2013 52237 UPE54 1
Jetzt verwende ich:
df = pd.read_csv('Sample.csv',index_col='date')
expd_gb = df.reset_index().groupby(['wholesaler', 'product'])['sales'].apply(pd.Series.expanding)
idx = df.reset_index().groupby(['wholesaler', 'product', 'date'])['sales'].count().index
cnct = pd.concat([expd_gb.iloc[n].mean().shift(1) for n in range(len(expd_gb))])
cnct.index = idx
Das durchschnittliche gibt (nicht letzten 52 Wochen) früherer Verkäufe für jedes Produkt-Groß Kombination. Das Ergebnis ist:
wholesaler product date
11209 UME24 12/31/2013 NaN
13131 UPE55 12/31/2012 NaN
2/23/2013 1.0
4/24/2013 578.5
52237 UPE54 12/18/2013 NaN
12/31/2013 9.0
53929 UME24 12/19/2013 NaN
UPE54 12/31/2012 NaN
82204 UPE55 12/31/2013 NaN
83389 UPE54 12/1/2013 NaN
12/17/2013 9.0
Mit der Zeit steigt die Iteration der Verkaufsrekord. Ich muss herausfinden, was der Durchschnitt der Verkäufe nur für die letzten 52 Wochen ist. Es bedeutet zu einem bestimmten Zeitpunkt zum Beispiel 11/6/2015, was ist der durchschnittliche Umsatz eines Produkts bei bestimmten Großhändler für die letzten 52 Wochen. Tausend Dank für deine Hilfe!
Vielen Dank! Das ist großartig!Glauben Sie, dass die Funktion 'timedelta()' schneller arbeiten könnte? Eigentlich muss ich mehr als 25 Millionen Zeilen berechnen und ich hoffe, den schnellsten Weg zu finden, das Ergebnis zu finden. Nochmals vielen Dank für Ihren eleganten Code! – Ashkan
Wow! Ein ziemlich großer Datensatz. Stellen Sie sich eine Datenbank-SQL-Lösung vor, die bedingte Aggregatabfragen zum Ausführen von avg und Indextabelle für das Datum verwendet. Dann in Pandas df importieren. – Parfait
Vielen Dank für Ihren Kommentar! Das ist eine gute Idee. – Ashkan