使用Pandas查找包含周末的日期范围

时间:2017-10-04 03:27:31

标签: python pandas datetime dataframe intervals

我在Python中有一个pandas DataFrame,其中两列表示开始日期和结束日期。 我想:

  • 鉴于两个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行的DataFrame,我当前的方法非常慢。 这是代码:

df.apply(lambda x: np.any(np.in1d([d.weekday() for d in pd.date_range(x.start, x.end)],[4,5])), axis=1)

有什么想法吗?

最快的解决方案是来自@Anton VBr的修改后的答案

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) )

1 个答案:

答案 0 :(得分:2)

我考虑过一些逻辑运算符,这些应该可以做到,但是我测试的小集合上没有时间改进。

s = df.start.dt.dayofweek
e = df.end.dt.dayofweek
(((s >= 4) & (s != 6)) | (( e>=4) & (s != 6)) | (e < s))