Pandas:如何基于DatetimeIndex创建is_weekend条件列?
解决Pandas DataFrame添加周末判断列的问题
嘿,我来帮你搞定这个需求!首先得澄清一个容易混淆的点:你说的“行索引的day字段”应该是指星期几(也就是dayofweek属性),而不是日期中的“几号”(day属性)——毕竟周末是按星期算的,不是每月的5/6号对吧?
正确的实现方法
方法1:用你尝试过的np.where
如果坚持用np.where,可以这样写:
import numpy as np import pandas as pd # 给df添加is_weekend列 df['is_weekend'] = np.where(df.index.dayofweek.isin([5, 6]), True, False)
这里df.index.dayofweek会返回每个索引对应的星期数字(0=周一,1=周二…5=周六,6=周日),isin([5,6])用来判断是否是周六或周日,np.where则把符合条件的行标记为True,其余为False。
方法2:更简洁的布尔值直接赋值
其实Pandas的布尔Series可以直接赋值给新列,不用绕np.where:
df['is_weekend'] = df.index.dayofweek.isin([5, 6])
这样写出来的效果和上面完全一样,代码更清爽。
你可能踩的坑
你之前出错大概率是这两个原因之一:
- 混淆了
day和dayofweek:如果用了df.index.day,那判断的是日期中的“5号”或“6号”,和周末完全不沾边; - 错误用了逻辑运算符:比如直接写
df.index.dayofweek ==5 or df.index.dayofweek ==6,Pandas里不能用or,要用|(且要加括号),或者更推荐用isin()来避免这种问题。
如果真的是想判断日期的“5号”或“6号”,那代码是这样的:
df['is_5_or_6'] = df.index.day.isin([5, 6])
内容的提问来源于stack exchange,提问作者anon_swe
相关产品推荐
相关产品推荐

