Надеюсь, я правильно понял вашу идею.
Сначала преобразуйте столбец 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 |
+----+--------+-----------------+--------+