Nehmen wir an, ich habe den folgenden Datenrahmen, der die Ernährungsgewohnheiten meines Haustierfrosches darstellt
date bugs_eaten_today
2019-01-31 0
2019-01-30 5
2019-01-29 6
2019-01-28 7
2019-01-27 2
...
Jetzt möchte ich eine neue Spalte berechnen bugs_eaten_past_20_days
date bugs_eaten_today bugs_eaten_paast_20_days
2019-01-31 0 48
2019-01-30 5 38
2019-01-29 6 57
2019-01-28 7 63
2019-01-27 2 21
...
Wie würde ich das machen? (Beachten Sie, dass wir keine Daten für die letzten 20 Zeilen haben, also werden sie nur sein NaN
)
Sie können eine rollierende Summe machen (mit 20 statt 3):
In [11]: df.bugs_eaten_today.rolling(3, 1).sum()
Out[11]:
0 0.0
1 5.0
2 11.0
3 18.0
4 15.0
Name: bugs_eaten_today, dtype: float64
Sie müssen dies in umgekehrter Reihenfolge tun, da der Index umgekehrt ist:
In [12]: df[::-1].bugs_eaten_today.rolling(3, 1).sum()
Out[12]:
4 2.0
3 9.0
2 15.0
1 18.0
0 11.0
Name: bugs_eaten_today, dtype: float64
In [13]: df['bugs_eaten_paast_20_days'] = df[::-1].bugs_eaten_today.rolling(3, 1).sum()
Es ist wahrscheinlich robuster, das Datum als Index zu verwenden und über 20D (ays) zu rollen:
In [21]: df1 = df.set_index('date').sort_index()
In [22]: df1.bugs_eaten_today.rolling('3D', 1).sum()
Out[22]:
date
2019-01-27 2.0
2019-01-28 9.0
2019-01-29 15.0
2019-01-30 18.0
2019-01-31 11.0
Name: bugs_eaten_today, dtype: float64
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen