Давайте сначала создадим пример фрейма данных (немного отличающийся от вашего):
data = [('2019-01-01 13:00','John', 'Chrome'),('2019-01-01 13:02','John', 'Chrome'),('2019-01-01 13:06','John', 'Chrome'),('2019-01-01 13:00','Mike', 'Chrome'),('2019-01-01 13:02','Mike', 'Chrome'), ('2019-01-01 13:06','John', 'Chrome')]
df = pd.DataFrame(data, columns =['Time','Name','App'])
Вам понадобится время в качестве индекса в вашем фрейме данных. Вы можете достичь этого:
df.index = pd.to_datetime(df['Time'])
Тогда вы можете сделать следующее:
df.groupby(['Name', 'App', pd.Grouper(freq='5T')]).min() #5T here means 5 minutes
(обратите внимание, что это сгруппирует пятиминутные интервалы, начиная с полного часа, что означает, что 13:04 и 13:06 - это два разных случая, когда речь идет об этом решении). Вы можете искать различные частоты для группировки по http://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html
Результат:
Name App Time
John Chrome 2019-01-01 13:00:00 2019-01-01 13:00
2019-01-01 13:05:00 2019-01-01 13:06
Mike Chrome 2019-01-01 13:00:00 2019-01-01 13:00
Второй раз - это время, которое вас заинтересовало. Результат - pd.Series, вы, скорее всего, захотите сделать его фреймом данных или применить .unstack(level=1)
.
Как было отмечено в комментариях, вы не обязательно хотите указывать Time как индекс и новый столбец, тогда вместо df.index = pd.to_datetime(df.Time)
вы можете захотеть сделать:
df.set_index('Time', inplace=True)