Pandas resamplen mit Startdatum

stimmen
6

Ich möchte ein Pandas-Objekt mit einem bestimmten Datum (oder Monat) als Rand des ersten Abfalleimers resampeln. Zum Beispiel möchte ich im folgenden Ausschnitt meinen ersten Indexwert haben 2020-02-29und gebe gerne start=2oder start=2020-02-29an.

>>> dates = pd.date_range(2020-01-29, 2021-07-04)
>>> s = pd.Series(range(len(dates)), index=dates)
>>> s.resample('4M').count()
2020-01-31      3
2020-05-31    121
2020-09-30    122
2021-01-31    123
2021-05-31    120
2021-09-30     34
Freq: 4M, dtype: int64

Bislang ist dies das Sauberste, was mir an Verwendungsmöglichkeiten pd.cutund groupby:

>>> rule = 4M
>>> start = pd.Timestamp(2020-02-29) - pd.tseries.frequencies.to_offset(rule)
>>> end = s.index.max() + pd.tseries.frequencies.to_offset(rule)
>>> bins = pd.date_range(start, end, freq=rule)
>>> gb = s.groupby(pd.cut(s.index, bins)).count()
>>> gb.index = gb.index.categories.right
>>> gb
2020-02-29     32
2020-06-30    122
2020-10-31    123
2021-02-28    120
2021-06-30    122
2021-10-31      4
dtype: int64
Veröffentlicht am 09/06/2020 um 21:14
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
0

Sie können loffset

>>> dates = pd.date_range("2020-01-29", "2021-07-04")
>>> s = pd.Series(range(len(dates)), index=dates)
>>> s.resample('4M', loffset='1M').count()
2020-02-29      3
2020-06-30    121
2020-10-31    122
2021-02-28    123
2021-06-30    120
2021-10-31     34
Freq: 4M, dtype: int64

Der Offset gibt an, um wie viel Sie von links nach rechts versetzen möchten

Weitere Einzelheiten finden Sie in den Dokumenten

Die Datumsbehälter enden so, wie Sie es wünschen, aber unsere resultierenden Werte unterscheiden sich. Ich werde später am Abend auf die Gründe eingehen, wenn ich etwas mehr mit dem Code spielen kann. Ich vermute, es hat damit zu tun, wie die Dattelbehälter loffsettatsächlich gehandhabt werden

Beantwortet am 11/06/2020 um 22:48
quelle vom benutzer

stimmen
0

Alles, was Sie verwenden müssen, ist pd.cutwie unten beschrieben:

>>> gb = pd.cut(s.index, bins).value_counts()
>>> gb.index = gb.index.categories.right
>>> gb
2020-02-29     32
2020-06-30    122
2020-10-31    123
2021-02-28    120
2021-06-30    122
2021-10-31      4
dtype: int64

sie brauchen nicht groupby

Beantwortet am 11/06/2020 um 23:23
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more