Поскольку вы хотите объединить данные в зависимости от часа, самый простой способ - сначала преобразовать их в 24-часовой формат, а затем использовать pd.cut
.
df = pd.DataFrame({'ID': ['A', 'B', 'C', 'D'], 'Time': ['2:44PM', '3:23AM', '5:00PM', '12:00AM']})
df['Time'] = pd.to_datetime(df['Time'], format='%I:%M%p').dt.hour
df['T_flag'] = pd.cut(df['Time'], bins=np.array([-1,0,6,12,18,24]), labels=[3,0,1,2,3])
Это даст:
ID Time T_flag
A 14 2
B 3 0
C 17 2
D 0 3
Первый (-1,0]
бин необходим для преобразования 12:00 AM в метку 3. Преобразование этого значения в datetime даст 0, что по умолчанию даст ему метку 0 (с первым бином (-1,6]
или include_lowest=True
).