Panda's met startdatum

stemmen
6

Ik wil een panda-object opnieuw bemonsteren met een specifieke datum (of maand) als rand van de eerste bak. Bijvoorbeeld, in het volgende fragment wil ik mijn eerste indexwaarde hebben 2020-02-29en ik wil graag specificeren start=2of start=2020-02-29.

>>> 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

Tot nu toe is dit het schoonste wat ik kan bedenken pd.cuten 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
De vraag is gesteld op 09/06/2020 om 21:14
bron van user
In andere talen...                            


2 antwoorden

stemmen
0

U kunt gebruik maken van 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

De offset is standaard ingesteld op hoeveel u wilt compenseren door, van links

Zie meer details in de docs

De datumbakken eindigen zoals u wilt, maar onze resulterende waarden verschillen. Ik zal later vanavond ingaan op het waarom, als ik wat meer met de code kan spelen. Ik vermoed dat het te maken heeft met de manier waarop loffsethet binnenslaan in zijn werk gaat

antwoordde op 11/06/2020 om 22:48
bron van user

stemmen
0

Het enige wat u hoeft te gebruiken is pd.cutzoals hieronder:

>>> 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

het is niet nodig om groupby

antwoordde op 11/06/2020 om 23:23
bron van user

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