Предполагая формат даты, который вы используете в своем примере, следующий код будет генерировать час недели из объекта даты и времени, сгенерированного с вашей отметкой времени:
from datetime import datetime
timestamp = '2/19/2019 17:33'
timestamp_object = datetime.strptime(timestamp, '%m/%d/%Y %H:%M')
hour_of_week = (timestamp_object.timetuple().tm_wday * 24 + 24) - (24 - timestamp_object.timetuple().tm_hour)
print('Hour of the week: {}'.format(hour_of_week))
Вывод:
Hour of the week: 41
Это должно дать вам инструменты, которые вы должны применить в вашем контексте.Вот так:
df['Date'] = df['Date'].apply(pd.to_datetime)
df['Hour of Week'] = ((df['Date'].dt.dayofweek) * 24 + 24) - (24 - df['Date'].dt.hour)
df['Day of Week'] = df['Date'].dt.dayofweek
df['Hour of Day'] = df['Date'].dt.hour
df = df[['Date', 'Day of Week', 'Hour of Day', 'Hour of Week', 'Price of X', 'Price of Y']]
Обратите внимание, что если вы определенно хотите начать день с часа 1, а не с нуля, вам нужно будет сделать:
df['Hour of Week'] = ((df['Date'].dt.dayofweek) * 24 + 24) - (24 - df['Date'].dt.hour) + 1
и
df['Hour of Day'] = df['Date'].dt.hour + 1
, чтобы избежать путаницы.
Точно так же, как следующие, чтобы сместить первый день в 1
:
df['Day of Week'] = df['Date'].dt.dayofweek + 1
Просто помните, что значение Hour of Day
df['Date'].dt.hour
начинается с 0
всякий раз, когда вы проводите сравнение.По этой причине я бы предложил использовать 0
в качестве стандарта.То же самое относится к Day of Week
.
Если Hour of Week
начинается с 0
, ваш фрейм данных выглядит примерно так:
Date Day of Week Hour of Day Hour of Week Price of X Price of Y
0 2011-01-01 00:30:00 5 0 120 19 172
1 2011-01-01 01:00:00 5 1 121 98 105
2 2011-01-01 01:30:00 5 1 121 40 -6
3 2011-01-01 02:00:00 5 2 122 68 120
4 2011-01-01 02:30:00 5 2 122 16 182
5 2011-01-01 03:00:00 5 3 123 23 187
6 2011-01-01 03:30:00 5 3 123 94 200
7 2019-02-18 00:01:00 0 0 0 23 187
8 2019-02-18 23:15:00 0 23 23 23 187
9 2019-02-24 23:59:00 6 23 167 23 187
С увеличением дня и часов на 1:
df['Hour of Week'] = ((df['Date'].dt.dayofweek) * 24 + 24) - (24 - df['Date'].dt.hour) + 1
df['Day of Week'] = df['Date'].dt.dayofweek + 1
df['Hour of Day'] = df['Date'].dt.hour + 1
Вы получаете:
Date Day of Week Hour of Day Hour of Week Price of X Price of Y
0 2011-01-01 00:30:00 6 1 121 19 172
1 2011-01-01 01:00:00 6 2 122 98 105
2 2011-01-01 01:30:00 6 2 122 40 -6
3 2011-01-01 02:00:00 6 3 123 68 120
4 2011-01-01 02:30:00 6 3 123 16 182
5 2011-01-01 03:00:00 6 4 124 23 187
6 2011-01-01 03:30:00 6 4 124 94 200
7 2019-02-18 00:01:00 1 1 1 23 187
8 2019-02-18 23:15:00 1 24 24 23 187
9 2019-02-24 23:59:00 7 24 168 23 187