我有一个Python中的pandas数据框架,有两列表示开始和结束日期。
我想:
-
给定两个熊猫系列作为起始日期作为结束日期作为输入。。。
-
-
将pandas序列输出为布尔值。
-
解决方案应该相对较快,因为我正在处理超过2M行。
数据集看起来像:
start end
2013-08-02 2013-08-04
2014-11-24 2014-11-28
2013-10-29 2013-10-31
2013-12-06 2013-12-10
2014-08-15 2014-08-17
我期待的是:
has_weekend
TRUE
FALSE
FALSE
TRUE
TRUE
我目前的方法对于具有近2M行的数据帧来说相当缓慢。
df.apply(lambda x: np.any(np.in1d([d.weekday() for d in pd.date_range(x.start, x.end)],[4,5])), axis=1)
有什么想法吗?
解决方案
s = df.start.dt.dayofweek
e = df.end.dt.dayofweek
dt = (df.end- df.start).dt.days
has_weekend = ( ((s >= 4) & (s != 6)) | ( e>=5) | ((e < s) & (s != 6)) | (dt >= 6) )