希望我正确理解了您的想法。
首先,将您的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'))
结果:
+----+--------+-----------------+--------+
| | 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
结果:
+----+--------+-----------------+--------+
| | 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 |
+----+--------+-----------------+--------+