将数据帧日期行转换为周末/非周末值

Rau*_*aul 8 python dataframe pandas

我有一个带有DATE行的数据帧,如果日期是周末日,我需要将其转换为值为1的行,如果不是,则需要将其转换为0.

到目前为止,我将数据转换为工作日

df['WEEKDAY'] = pandas.to_datetime(df['DATE']).dt.dayofweek
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有功能的情况下创建这个"WEEKEND"行?

谢谢!

dag*_*rha 15

这是我提出的解决方案:

df['WEEKDAY'] = ((pd.DatetimeIndex(df.index).dayofweek) // 5 == 1).astype(float)
Run Code Online (Sandbox Code Playgroud)

基本上它所做的只是使用整数除法(//)来测试它的dayofweek属性是否DatetimeIndex小于5.通常这只返回一个TrueFalse,但是astype(float)在最后添加返回1或0而不是布尔值.

  • 尽管使用 Joran 评论中的不等式更具可读性,但这将正常工作。 (2认同)
  • 这个答案似乎有点不对劲。工作日的值为 [0,1,2,3,4],周末的值为 [5,6]。让我们考虑 dayofweek 4 : 4//5 != 1,因此我们得到 0。换句话说,答案需要将标签 'WEEKDAY' 替换为 'WEEKEND',或者谓词中的 1 需要替换为 0 。 (2认同)

小智 5

获取周末指示器的另一种方法是通过where函数:

df['WEEKDAY'] = np.where((df['DATE']).dt.dayofweek) < 5,0,1)
Run Code Online (Sandbox Code Playgroud)