#python #pandas #group-by
#python #pandas #группировка по
Вопрос:
Я пытаюсь сгруппировать набор данных о продолжительности путешествия с интервалом в 5 минут, начиная с 0 до inf. Как я могу это сделать?
Мой пример фрейма данных выглядит так:
Duration
0 00:01:37
1 00:18:19
2 00:22:03
3 00:41:07
4 00:11:54
5 00:21:34
Я использовал этот код: df.groupby([pd.Grouper(key='Duration', freq='5T')]).size()
И я нашел следующий результат:
Duration
00:01:37 1
00:06:37 0
00:11:37 1
00:16:37 2
00:21:37 1
00:26:37 0
00:31:37 0
00:36:37 1
00:41:37 0
Freq: 5T, dtype: int64
Мой ожидаемый результат:
Duration Counts
00:00:00 0
00:05:00 1
00:10:00 0
00:15:00 1
00:20:00 1
........ ...
Я ожидаю, что индекс будет начинаться с 00:00:00
вместо 00:01:37
.
Или, я имею в виду, отображение ячеек также будет работать для меня:
Duration Counts
0-5 1
5-10 0
10-15 1
15-20 1
20-25 2
........ ...
Мне нужна ваша помощь, пожалуйста. Спасибо.
Ответ №1:
Во-первых, вам нужно сократить время до 5-й минуты. Затем просто посчитайте это. Я полагаю, это то, что вы ищете —
def round_to_5min(t):
""" This function rounds a timedelta timestamp to the nearest 5-min mark"""
t = datetime.datetime(1991,2,13, t.hour, t.minute - t.minute%5, 0)
return t
data['new_col'] = data.Duration.map(round_to_5min).dt.time
Комментарии:
1. Я получил это: AttributeError: объект ‘Timedelta’ в любом случае не имеет атрибута ‘hour’, спасибо. Я решил проблему с помощью
pd.cut
2. если вы сочтете это правильным, вы можете принять это как ответ на вопрос