Создать временные диапазоны в Пандах - PullRequest
3 голосов
/ 01 октября 2019

Я хочу применить аналогичный подход к этому вопросу Выберите строки DataFrame между двумя датами , но с временными диапазонами.

У меня есть набор данных о заказах в ресторане, который содержит время и тип заказа. Существует временной интервал для завтрака, обеда и ужина.

Интервалы времени:

завтрак: (8:00:00 - 12:00:00) обед: (12:00: 01-16: 00: 00) ужин: (16: 00: 01-20: 00: 00)

Образец набора данных:

order_type  time
0   Lunch   13:24:30
1   Dinner  18:28:43
2   Dinner  17:17:44
3   Lunch   15:46:28
4   Lunch   12:33:48
5   Lunch   15:26:11
6   Lunch   13:04:13
7   Lunch   12:13:31
8   Breakfast   08:20:16
9   Breakfast   08:10:08
10  Dinner  18:08:27
11  Breakfast   10:42:15
12  Dinner  19:09:17
13  Dinner  18:28:43
14  Breakfast   09:21:07

My timeПервоначально столбец был типа object, и я преобразовал его в timedelta64[ns].

Я хочу создать три временных диапазона, по одному для каждого order_type. Затем используйте их для проверки точности моего набора данных.

Когда у меня есть три диапазона, я могу запустить что-то вроде следующего for loop:

for order in dirtyData['order_type']:
    for time in dirtyData['time']:
        if order=='Breakfast' and time not in BreakfastRange:
            *do something*

Я ссылался на документация и этот пост . Чтобы применить between_time, но я продолжал получать ошибки.

Ответы [ 2 ]

2 голосов
/ 01 октября 2019

Мы можем использовать pd.cut, тогда вам просто нужно сопоставить вывод с вашим исходным order_type

pd.cut(df.time,pd.to_timedelta(['00:00:00','12:00:00','16:00:00','23:59:59']),labels=['B','L','D'])
2 голосов
/ 01 октября 2019

Вы можете использовать pd.cut:

# threshold for time range
bins = pd.to_timedelta(['8:00:00', '12:00:00', '16:00:00', '20:00:00'])

# cut:
df['order_type_gt'] = pd.cut(df['time'],
                             bins, 
                             labels=['Breakfast','Lunch', 'Dinner'], 
                             include_lowest=True)

вывод:

   order_type     time order_type_gt
0       Lunch 13:24:30         Lunch
1      Dinner 18:28:43        Dinner
2      Dinner 17:17:44        Dinner
3       Lunch 15:46:28         Lunch
4       Lunch 12:33:48         Lunch
5       Lunch 15:26:11         Lunch
6       Lunch 13:04:13         Lunch
7       Lunch 12:13:31         Lunch
8   Breakfast 08:20:16     Breakfast
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...