Ricampione di panda con data di inizio

voti
6

Vorrei ricampionare un oggetto panda utilizzando una data (o un mese) specifica come bordo del primo cestino. Per esempio, nel seguente snippet vorrei che il mio primo valore dell'indice fosse 2020-02-29e sarei felice di specificare start=2o 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

Finora questo è il più pulito che mi sia venuto in mentepd.cutgroupby:

>>> 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
È pubblicato 09/06/2020 alle 21:14
fonte dall'utente
In altre lingue...                            


2 risposte

voti
0

È possibile utilizzare 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

L'offset predefinito è pari a quanto si vuole compensare, da sinistra

Vedi maggiori dettagli nei documenti

I contenitori di data finiscono nel modo desiderato, ma i valori risultanti sono diversi. Mi immergerò nel perché più tardi stasera, quando potrò giocare un po' di più con il codice. Sospetto che abbia a che fare con il modo in cui gestisce loffseteffettivamente il bidone

Risposto il 11/06/2020 a 22:48
fonte dall'utente

voti
0

Tutto quello che dovete usare è pd.cutcome qui sotto:

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

non c'è bisogno di usare groupby

Risposto il 11/06/2020 a 23:23
fonte dall'utente

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