如何在1到48范围内编码时间

时间:2018-11-24 06:38:00

标签: python-3.x pandas datetime time-series

我有以下时间格式,时间间隔为24小时半小时,即一天48个间隔。

enter image description here

我想用以下格式对其进行编码。

enter image description here

1 个答案:

答案 0 :(得分:1)

我相信您需要maptimedelta_rangezip创建的字典,因为相同类型的数据是必需的,请转换列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_rangeDatetimeIndex.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)