2017-04-07 37 views
1

我有一個pandas數據框,其中有許多列包含某些事件的時間戳,這些時間戳可能發生在對象上,其中對象ID索引行。如何計算python pandas中給定時間間隔內的行數?

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

我想算在一天中的事件的出現次數的(丟棄的日期)的數量,在間隔我指定。

索爾遠,我用datetime.hourdatetime.minute recunstructing自午夜的分鐘數解決這個問題:

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

這做工作,但似乎unpythonic,我敢肯定有一個更好的辦法。但是如何?

我見過this question,而是試圖

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

保持最新信息,這是我想放棄。將pd.datetime對象與.time()方法轉換似乎有問題,因爲結果不能被視爲日期時間對象。

+0

你能提供數據的最小樣品,你想要達到的結果? –

回答

1

似乎可以省略apply和簡化的解決方案:

ev1_counts = df.groupby((60*df.event1.dt.hour+df.event1.dt.minute)//i * i)['event1'].count() 
相關問題