Длительность группы Pandas — Начальная группа -диапазон с определенным значением

#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. если вы сочтете это правильным, вы можете принять это как ответ на вопрос