Как преобразовать время в соответствующий слот в DataFrame Python - PullRequest
0 голосов
/ 17 марта 2020

У меня есть фрейм данных

import pandas as pd
d = {'name':['a','b','c'],'time': ['18:15:10','06:16:03','11:51:01']}
df = pd.DataFrame(data=d)

Я планирую преобразовать время в слот. Например, время карты в ('00:00:00'-'00:59:59') как 1, время карты в ('8:00:00'-'8:59:59') как 9.

как я могу добавить столбец к df так, чтобы мой конечный df был

name    time          slot
'a'     '18:15:10'      18

И что если я, что преобразовать время в ('00:00:00'-'5:59:59') в 1. В этом случае мой временной интервал имеет большой период.

Спасибо

1 Ответ

1 голос
/ 17 марта 2020

Надеюсь, я правильно понял вашу идею.

Сначала преобразуйте столбец time в timedelta64:

df['time']=pd.to_timedelta(df['time'])

Если вы хотите преобразовать время в пределах каждые x час (ов) , ответ довольно прост:

import numpy as np
x = 5
ranges = [(i,i+x) for i in range(0,24,x)]
df['slot'] = df['time'].apply(lambda x:[t<= (x/np.timedelta64(1, 'h')) <T for t,T in ranges].index(True)+1)

Результат:

+----+--------+-----------------+--------+
|    | name   | time            |   slot |
|----+--------+-----------------+--------|
|  0 | a      | 0 days 18:15:10 |      4 |
|  1 | b      | 0 days 06:16:03 |      2 |
|  2 | c      | 0 days 11:51:01 |      3 |
+----+--------+-----------------+--------+

И если вам нужны настраиваемые гибкие диапазоны времени, которые могут быть такими же точными, как h:m:s , вы должны:

ranges = [('0:0:0','12:0:0'),('12:0:0','23:59:59')]
ranges = [pd.to_timedelta(i) for i in ranges]
df['slot'] = df['time'].apply(lambda x:[t<=x<T for t,T in ranges].index(True)+1)

Результат:

+----+--------+-----------------+--------+
|    | name   | time            |   slot |
|----+--------+-----------------+--------|
|  0 | a      | 0 days 18:15:10 |      2 |
|  1 | b      | 0 days 06:16:03 |      1 |
|  2 | c      | 0 days 11:51:01 |      1 |
+----+--------+-----------------+--------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...