Pandowie pobierają ponownie próbkę z datą początkową

głosy
6

Chciałbym ponownie wypróbować obiekt pand, używając konkretnej daty (lub miesiąca) jako krawędzi pierwszego kosza. Na przykład, w poniższym snippecie chciałbym, aby moja pierwsza wartość indeksu była 2020-02-29i chętnie bym określił start=2lub 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

Jak na razie jest to najczystszy sposób, w jaki mogę wymyślić zastosowania pd.cuti 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
Utwórz 09/06/2020 o 21:14
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
0

Możesz użyć 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

Przesunięcie domyślne do tego, ile chcesz przesunąć o, od lewej

Zobacz więcej szczegółów w dokumentach

Pojemniki z datami kończą się tak, jak chcesz, ale nasze wynikowe wartości różnią się od siebie. Zanurzę się w to dlaczego jeszcze dziś wieczorem, kiedy będę mógł zagrać z kodem trochę więcej. Podejrzewam, że ma to związek z tym, jak loffsetnaprawdę radzi sobie z binningiem

Odpowiedział 11/06/2020 o 22:48
źródło użytkownik

głosy
0

Wszystko, czego potrzebujesz, to pd.cutjak poniżej:

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

nie ma potrzeby używać groupby

Odpowiedział 11/06/2020 o 23:23
źródło użytkownik

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