Как сделать флаги дня недели из индекса datetime в pandas - PullRequest
0 голосов
/ 20 июня 2020

У меня есть фрейм данных df, индекс которого находится в формате datetime. Я хотел бы создать 7 новых двоичных полей / столбцов, указывающих, какая дата - понедельник, вторник, среда, четверг, пятница, суббота или воскресенье. Так, например, в столбце Monday будет 1, если это понедельник, и 0.

Есть ли какой-нибудь изящный способ сделать это? Я пытался, но мои решения очень уродливые.

1 Ответ

2 голосов
/ 20 июня 2020

Если фрейм данных, например:

>>> df
         date
0  2018-01-01
1  2018-01-02
2  2018-01-03
3  2018-01-04
4  2018-01-05
5  2018-01-06
6  2018-01-07
7  2018-01-08
8  2018-01-09
9  2018-01-10
10 2018-01-11
11 2018-01-12
12 2018-01-13
13 2018-01-14
14 2018-01-15
15 2018-01-16
16 2018-01-17
17 2018-01-18
18 2018-01-19
19 2018-01-20

Мы можем использовать df['date'].dt.weekday для получения числа от 0 до 6, которое указывает день недели.

Затем мы можем использовать pd.get_dummies(…) [pandas -doc] для генерации «горячего кодирования»:

>>> pd.concat((df, pd.get_dummies(df['date'].dt.weekday)), axis=1)
         date  0  1  2  3  4  5  6
0  2018-01-01  1  0  0  0  0  0  0
1  2018-01-02  0  1  0  0  0  0  0
2  2018-01-03  0  0  1  0  0  0  0
3  2018-01-04  0  0  0  1  0  0  0
4  2018-01-05  0  0  0  0  1  0  0
5  2018-01-06  0  0  0  0  0  1  0
6  2018-01-07  0  0  0  0  0  0  1
7  2018-01-08  1  0  0  0  0  0  0
8  2018-01-09  0  1  0  0  0  0  0
9  2018-01-10  0  0  1  0  0  0  0
10 2018-01-11  0  0  0  1  0  0  0
11 2018-01-12  0  0  0  0  1  0  0
12 2018-01-13  0  0  0  0  0  1  0
13 2018-01-14  0  0  0  0  0  0  1
14 2018-01-15  1  0  0  0  0  0  0
15 2018-01-16  0  1  0  0  0  0  0
16 2018-01-17  0  0  1  0  0  0  0
17 2018-01-18  0  0  0  1  0  0  0
18 2018-01-19  0  0  0  0  1  0  0
19 2018-01-20  0  0  0  0  0  1  0

Здесь 0, 1, 2, и c. - это номера дней недели.

Для названий дней вы можете использовать .day_name() вместо:

>>> pd.concat((df, pd.get_dummies(df['date'].dt.day_name())), axis=1)
         date  Friday  Monday  Saturday  Sunday  Thursday  Tuesday  Wednesday
0  2018-01-01       0       1         0       0         0        0          0
1  2018-01-02       0       0         0       0         0        1          0
2  2018-01-03       0       0         0       0         0        0          1
3  2018-01-04       0       0         0       0         1        0          0
4  2018-01-05       1       0         0       0         0        0          0
5  2018-01-06       0       0         1       0         0        0          0
6  2018-01-07       0       0         0       1         0        0          0
7  2018-01-08       0       1         0       0         0        0          0
8  2018-01-09       0       0         0       0         0        1          0
9  2018-01-10       0       0         0       0         0        0          1
10 2018-01-11       0       0         0       0         1        0          0
11 2018-01-12       1       0         0       0         0        0          0
12 2018-01-13       0       0         1       0         0        0          0
13 2018-01-14       0       0         0       1         0        0          0
14 2018-01-15       0       1         0       0         0        0          0
15 2018-01-16       0       0         0       0         0        1          0
16 2018-01-17       0       0         0       0         0        0          1
17 2018-01-18       0       0         0       0         1        0          0
18 2018-01-19       1       0         0       0         0        0          0
19 2018-01-20       0       0         1       0         0        0          0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...