Добавить столбец часа недели в Python - PullRequest
0 голосов
/ 19 февраля 2019

В настоящее время у меня есть некоторые данные временных рядов, которые выглядят так:

>>> print(df)
                Date  Price of X  Price of Y
0     1/01/2011 0:30          19         172
1     1/01/2011 1:00          98         105
2     1/01/2011 1:30          40          -6
3     1/01/2011 2:00          68         120
4     1/01/2011 2:30          16         182
5     1/01/2011 3:00          23         187
6     1/01/2011 3:30          94         200
7     1/01/2011 4:00          21          97
8     1/01/2011 4:30          43         103
9     1/01/2011 5:00          68         136
10    1/01/2011 5:30          94         109
11    1/01/2011 6:00          94          26
12    1/01/2011 6:30          30          46
13    1/01/2011 7:00          30         116
14    1/01/2011 7:30          38         103
15    1/01/2011 8:00          66         185
16    1/01/2011 8:30          50         175
17    1/01/2011 9:00          71         126
18    1/01/2011 9:30          12         181
19   1/01/2011 10:00          35          77
20   1/01/2011 10:30          23         114
21   1/01/2011 11:00          39         107
22   1/01/2011 11:30          14          28
23   1/01/2011 12:00          38          39
24   1/01/2011 12:30          33         119
25   1/01/2011 13:00          55         117
26   1/01/2011 13:30           2          70
27   1/01/2011 14:00          13         194
28   1/01/2011 14:30          58         140
29   1/01/2011 15:00          54          73
..               ...         ...         ...
363  8/01/2011 14:00          25          84
364  8/01/2011 14:30          29          16
365  8/01/2011 15:00           1         129
366  8/01/2011 15:30           8          67
367  8/01/2011 16:00          65          65
368  8/01/2011 16:30          41         139
369  8/01/2011 17:00           0          27
370  8/01/2011 17:30          46         145
371  8/01/2011 18:00          27          -1
372  8/01/2011 18:30          97         109
373  8/01/2011 19:00          41         149
374  8/01/2011 19:30          27         197
375  8/01/2011 20:00          46          62
376  8/01/2011 20:30          53         117
377  8/01/2011 21:00          92          32
378  8/01/2011 21:30          41          88
379  8/01/2011 22:00          23          47
380  8/01/2011 22:30          96         126
381  8/01/2011 23:00          11         180
382  8/01/2011 23:30          44          84
383   9/01/2011 0:00          96          50
384   9/01/2011 0:30          46         109
385   9/01/2011 1:00          30          35
386   9/01/2011 1:30          89         197
387   9/01/2011 2:00          86          31
388   9/01/2011 2:30          55          67
389   9/01/2011 3:00          43         117
390   9/01/2011 3:30          79         133
391   9/01/2011 4:00          43          85
392   9/01/2011 4:30          78          50

[393 rows x 3 columns]

Используя python, я хочу добавить столбец «час недели», однако мне удалось сделать это с помощью Excel, однакоЯ не уверен, как это сделать в Python.

Вот как я работал в Excel:

excel

Любая помощь будет оценена, спасибо.

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Если столбец Date является объектом datetime, я бы использовал библиотеку datetime

from datetime import timedelta

# Convert to timedelta
df['Hours'] = df.loc[:, 'Date'].apply(lambda x: timedelta(days=x.weekday(), hours=x.hour))
# Calculate the hours
df['Hours'] = df.loc[:, 'Hours'].apply(lambda x: x.total_seconds()/3600)
0 голосов
/ 19 февраля 2019

Предполагая формат даты, который вы используете в своем примере, следующий код будет генерировать час недели из объекта даты и времени, сгенерированного с вашей отметкой времени:

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
0 голосов
/ 19 февраля 2019

Попробуйте:

Предполагая, что столбец date имеет тип datetime

dayofweek: день недели с понедельником = 0, воскресенье = 6

df['hour_of_the_week'] = df['date'].dt.dayofweek * 24 + (df['date'].dt.hour + 1)

Вы можете преобразовать date в дату и время с помощью

df['date'] = df['date'].apply(pd.to_datetime)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...