Как кодировать время в диапазоне от 1 до 48 - PullRequest
0 голосов
/ 24 ноября 2018

У меня следующий формат времени с интервалом в полчаса в 24 ЧАСА, то есть 48 интервалов в день.

enter image description here

И я хочузакодируйте его в следующем формате.

enter image description here

1 Ответ

0 голосов
/ 24 ноября 2018

Я полагаю, вам нужно 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...