2017-04-07 2 views
1

Ich habe einen Pandas-Datenrahmen mit einer Anzahl von Spalten, die Zeitstempel für bestimmte Ereignisse enthalten, die mit Objekten passieren können, wo die Objekt-IDs die Zeilen indizieren.Wie zählt man die Anzahl der Zeilen in einem bestimmten Zeitintervall in Python Pandas?

obj_id | event1 | event2 | event3 | ... 
1  | datetime| datetime | NaT  | ... 
... | ...  | ...  | ...  | ... 

ich die Anzahl der Vorkommen eines Ereignisses im Laufe des Tages (verwirft das Datum), zählen möchten in Intervallen angeben ich.

Sor weit, ich dieses Problem lösen, indem die Anzahl der Minuten seit Mitternacht recunstructing datetime.hour und datetime.minute mit:

i = 5 # number of minutes in the interval I'm interested in 
ev1_counts = df.groupby(
         df.event1.apply(lambda x: i * ((60*x.hour + x.minute)//i)) 
         )['event1'].count() 

Dies macht den Job, aber es scheint unpythonic und ich bin sicher, dass es einen besseren Weg gibt. Aber wie?

Ich habe this question gesehen, aber

time_series = pd.DatetimeIndex(df.event1) 
ts_df = pd.Series([1]*len(time_series), index=time_series) 
ev1_counts = ts_df.groupby(pd.TimeGrouper(freq = '{:d}Min'.format(i)).count() 

Hält die aktuellen Informationen versuchen, die mich zu verwerfen. Die Konvertierung der Objekte pd.datetime mit der Methode .time() scheint problematisch zu sein, da das Ergebnis nicht als Datetime-Objekt behandelt werden kann.

+0

Können Sie eine minimale Datenprobe, und das Ergebnis wollen Sie erreichen? –

Antwort

1

Es scheint, Sie apply und vereinfachen Lösung weglassen:

ev1_counts = df.groupby((60*df.event1.dt.hour+df.event1.dt.minute)//i * i)['event1'].count() 
Verwandte Themen