2016-10-29 5 views
2

У меня есть данные, загруженные в PandasDataFrame, которые я хочу объединить в интервалы времени и подсчитывать количество записей в каждом интервале. Дело в том, что метод, который я нашел для агрегирования в интервалы времени и подсчет количества записей в каждом интервале, кажется довольно неуклюжим и, возможно, не самым эффективным. Также больно изменить интервал, который я хочу сгруппировать, чтобы подсчитать количество твитов.Подсчитайте количество записей по интервалу datetime

data = [[Timestamp('2016-10-26 18:47:53'), 'mention'], 
     [Timestamp('2016-10-26 20:28:35'), 'retweet'], 
     [Timestamp('2016-10-26 20:57:38'), 'tweet'], 
     [Timestamp('2016-10-26 21:36:37'), 'mention'], 
     [Timestamp('2016-10-26 22:49:08'), 'tweet'], 
     [Timestamp('2016-10-27 00:10:19'), 'tweet'], 
     [Timestamp('2016-10-27 01:14:46'), 'tweet'], 
     [Timestamp('2016-10-27 01:45:03'), 'retweet'], 
     [Timestamp('2016-10-27 02:33:03'), 'tweet'], 
     [Timestamp('2016-10-27 05:55:52'), 'retweet'], 
     [Timestamp('2016-10-27 14:26:57'), 'mention'], 
     [Timestamp('2016-10-27 17:46:42'), 'tweet'], 
     [Timestamp('2016-10-27 17:53:33'), 'retweet'], 
     [Timestamp('2016-10-27 18:53:38'), 'tweet'], 
     [Timestamp('2016-10-27 21:02:00'), 'retweet'], 
     [Timestamp('2016-10-27 21:23:50'), 'retweet'], 
     [Timestamp('2016-10-27 22:21:01'), 'retweet'], 
     [Timestamp('2016-10-28 05:30:02'), 'retweet'], 
     [Timestamp('2016-10-28 13:11:01'), 'retweet'], 
     [Timestamp('2016-10-28 16:55:13'), 'retweet'], 
     [Timestamp('2016-10-28 18:25:02'), 'retweet'], 
     [Timestamp('2016-10-28 18:54:44'), 'retweet'], 
     [Timestamp('2016-10-28 19:22:14'), 'tweet'], 
     [Timestamp('2016-10-28 19:23:20'), 'tweet'], 
     [Timestamp('2016-10-28 22:33:03'), 'tweet']] 

df = pd.DataFrame(data, columns=['datetime', 'type']) 

df['type'].groupby([df.datetime.dt.month, df.datetime.dt.day,df.datetime.dt.hour]).count().plot(kind="line") 

Бонусные баллы, если вы также можете помочь мне разобраться, как разбить «тип» на 3 отдельные строки! :)

ответ

6

предварительно панды 0.19

df.set_index('datetime').resample('H').type.count().plot() 

разместить панды 0.19

df.resample('H', on='datetime').type.count().plot() 

enter image description here


для бонусных очков

df.set_index('datetime').groupby('type') \ 
    .resample('H').size().unstack(0, fill_value=0) \ 
    .plot() 

enter image description here

Смежные вопросы