30 Tage in Pandas rollen
Dec 08 2020
Ich habe einen Datensatz:
import pandas as pd
df = pd.DataFrame({
'ID': ['27459', '27459', '27459', '27459', '27459', '27459', '27459', '48002', '48002', '48002'],
'Invoice_Date': ['2020-06-26', '2020-06-29', '2020-06-30', '2020-07-14', '2020-07-25',
'2020-07-30', '2020-08-02', '2020-05-13', '2020-06-20', '2020-06-28'],
'Difference_Date': [0,3,1,14,11,5,3,0,38,8],
})
df
Ich muss eine weitere Spalte hinzufügen, die den Durchschnitt des rollierenden Zeitraums von 30 Tagen darstellt. Ich habe versucht, zu verwenden, rolling
aber es gibt mir Fehler window must be an integer
. Da es sich um kundenbasierte Daten handelt, müssen diese ebenfalls gruppiert ID
werden.
Meine erwartete Ausgabe ist:
ID Invoice_Date Difference_Date Average
0 27459 2020-06-26 0 0.00
1 27459 2020-06-29 3 1.50
2 27459 2020-06-30 1 1.33
3 27459 2020-07-14 14 4.50
4 27459 2020-07-25 11 5.80
5 27459 2020-07-30 5 10.00
6 27459 2020-08-02 3 8.25
7 48002 2020-05-13 0 0.00
8 48002 2020-06-20 38 38.00
9 48002 2020-06-28 8 23.00
Gibt es eine effiziente Problemumgehung für die Berechnung des Durchschnitts von 30 Tagen?
Antworten
2 ZLi Dec 08 2020 at 21:32
Dies liegt daran, dass Pandas einen DatetimeIndex benötigen, um Folgendes zu tun df.rolling('30D')
:
import pandas as pd
df = pd.DataFrame({
'ID': ['27459', '27459', '27459', '27459', '27459', '27459', '27459', '48002', '48002', '48002'],
'Invoice_Date': ['2020-06-26', '2020-06-29', '2020-06-30', '2020-07-14', '2020-07-25',
'2020-07-30', '2020-08-02', '2020-05-13', '2020-06-20', '2020-06-28'],
'Difference_Date': [0,3,1,14,11,5,3,0,38,8],
})
df.index = pd.DatetimeIndex(df['Invoice_Date'])
df = df.sort_index()
df.rolling('30D')