代码之家  ›  专栏  ›  技术社区  ›  dandroid

查找日期范围,包括使用熊猫的周末

  •  1
  • dandroid  · 技术社区  · 8 年前

    我有一个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) )
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Anton vBR    8 年前

    我考虑了一些逻辑运算符,这些应该可以,但是它们在我测试的小集合上没有任何时间改进。

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