Я полагаю, вам нужно map
по словарю, созданному timedelta_range
и zip
, для данных того же типа необходимо преобразовать столбец to_timedelta
:
df = pd.DataFrame({'Time':['00:00:00','00:30:00','01:00:00','08:00:00']})
print (type(df['Time'].iat[0]))
<class 'str'>
d = dict(zip(pd.timedelta_range('00:00:00', '23:30:00', freq='30T'), range(1, 49)))
df['EncodedTime'] = pd.to_timedelta(df['Time']).map(d)
print (df)
Time EncodedTime
0 00:00:00 1
1 00:30:00 2
2 01:00:00 3
3 08:00:00 17
Аналогичное решение, созданное date_range
с DatetimeIndex.strftime
:
d = dict(zip(pd.date_range('00:00:00', '23:30:00', freq='30T').strftime('%H:%M:%S'),
range(1, 49)))
df['EncodedTime'] = df['Time'].map(d)
Решение работаетсо временем:
df = pd.DataFrame({'Time':pd.to_datetime(['00:00:00','00:30:00','01:00:00','08:00:00']).time})
print (type(df['Time'].iat[0]))
<class 'datetime.time'>
d = dict(zip(pd.date_range('00:00:00', '23:30:00', freq='30T').time, range(1, 49)))
df['EncodedTime'] = df['Time'].map(d)