Если фрейм данных, например:
>>> 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