Το Pandas επαναλαμβάνεται με ημερομηνία έναρξης

ψήφοι
6

Θα ήθελα να δείξω ξανά ένα αντικείμενο pandas χρησιμοποιώντας μια συγκεκριμένη ημερομηνία (ή μήνα) ως την άκρη του πρώτου κάδου. Για παράδειγμα, στο παρακάτω απόσπασμα θα ήθελα να είναι η πρώτη τιμή ευρετηρίου μου 2020-02-29 και θα χαρούμε να καθορίσω start=2 ή 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

Μέχρι στιγμής αυτό είναι το καθαρότερο που μπορώ να βρω τις χρήσεις pd.cut και 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
Δημοσιεύθηκε 09/06/2020 στις 21:14
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
0

Μπορείς να χρησιμοποιήσεις 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

Η μετατόπιση είναι από προεπιλογή στο ποσό που θέλετε να αντισταθμίσετε από τα αριστερά.

Δείτε περισσότερες λεπτομέρειες στα έγγραφα .

Οι κάδοι ημερομηνίας καταλήγουν με τον τρόπο που θέλετε, αλλά οι τιμές που προκύπτουν διαφέρουν. Θα καταλάβω γιατί αργότερα απόψε όταν μπορώ να παίξω με τον κωδικό λίγο περισσότερο. Υποψιάζομαι ότι έχει να κάνει με το πώς loffset χειρίζεται στην πραγματικότητα το binning.

Απαντήθηκε 11/06/2020 στις 22:48
πηγή χρήστη

ψήφοι
0

Το μόνο που χρειάζεται να χρησιμοποιήσετε είναι pd.cut όπως παρακάτω:

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

δεν υπάρχει ανάγκη χρήσης groupby

Απαντήθηκε 11/06/2020 στις 23:23
πηγή χρήστη

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