如何从熊猫的日期时间索引中制作星期几标志

时间:2020-06-19 21:45:28

标签: python pandas

我有一个数据框df,其索引为日期时间格式。我想创建7个新的二进制字段/列,以指示日期是星期一,星期二,星期三,星期四,星期五,星期六还是星期日。因此,例如,如果星期一是星期一,则星期一中将有1,否则为0。

是否有一种整齐的方法?我一直在尝试,但是我的解决方案非常难看。

1 个答案:

答案 0 :(得分:2)

如果数据框例如:

>>> 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获得06之间的数字,该数字指定一周中的一天。

然后我们可以使用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

012等是星期几。

对于日期名称,您可以改用.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