【问题标题】:Code to detect Sunday to Saturday date windows and modify Dataframe检测周日到周六日期窗口并修改 Dataframe 的代码
【发布时间】:2020-10-13 19:15:31
【问题描述】:

我正在尝试设置一个代码,该代码将接收带有日期窗口的表格并修改它们以适应 Sun-Sat 模板。

我的数据保存如下:

 Index   Name:               From:        To:    
   1      Joe Doe            6/1/2020     6/8/2020
   2      Joe Doe            6/14/2020    6/23/2020
   3      Brandon Smith      5/9/2020     5/20/2020
   4      Brandon Smith      5/26/2020    5/28/2020
   5      Brandon Smith      5/12/2020    5/24/2020
   6      Brandon Smith      5/26/2020    5/31/2020
   7      Sarah Roberts      6/3/2020     6/25/2020
   8      Sarah Roberts      6/15/2020    6/23/2020

我想创建另一个 From: 和 To: 列,但只捕获从星期日到星期六的 7、14、21... 天的窗口。

例如:索引 1 不适用,索引 2 将从第 14 位转换为第 20 位,依此类推。

我希望得到的结果表如下所示:

 Index   Name:               From:        To:          From_new:    To_new
   1      Joe Doe            6/1/2020     6/8/2020     NA           NA
   2      Joe Doe            6/14/2020    6/23/2020    6/12/2020    6/20/2020
   3      Brandon Smith      5/9/2020     5/20/2020    5/10/2020    5/16/2020
   4      Brandon Smith      5/26/2020    5/28/2020    NA           NA
   5      Brandon Smith      5/12/2020    5/24/2020    5/17/2020    5/23/2020
   6      Brandon Smith      5/26/2020    5/31/2020    NA           NA
   7      Sarah Roberts      6/3/2020     6/25/2020    6/7/2020     6/20/2020
   8      Sarah Roberts      6/15/2020    6/23/2020    NA           NA

我尝试遍历每条记录并查看开始的工作日,如果是星期天,然后运行到下一个星期六,但是如果它在此之后再运行一整周,或者不是星期天,我会感到困惑开始吧。

提前致谢。

【问题讨论】:

    标签: python-3.x pandas datetime pandas-groupby


    【解决方案1】:

    您不需要循环。解决方案位于this SO post。所有学分都应该去@ifly6。 :)

    话虽如此,这应该适合你:

        df['From_new'] = df['From:'] + pd.offsets.Week(weekday=6)
        df.loc[df['From:'].dt.weekday == 6, 'From_new'] = df.loc[df['From:'].dt.weekday == 6, 'From:']
        df['To_new'] = df['To:'] - pd.offsets.Week(weekday=5)
        df.loc[df['To:'].dt.weekday == 5, 'To_new'] = df.loc[df['From:'].dt.weekday == 5, 'To:']
        df.loc[df['To_new'] < df['From_new'], 'From_new'] = pd.NaT
        df.loc[df['From_new'].isna(), 'To_new'] = pd.NaT
    

    输出:

         Index    Name:      From:        To:   From_new     To_new
    1      Joe      Doe 2020-06-01 2020-06-08        NaT        NaT
    2      Joe      Doe 2020-06-14 2020-06-23 2020-06-14 2020-06-20
    3  Brandon    Smith 2020-05-09 2020-05-20 2020-05-10 2020-05-16
    4  Brandon    Smith 2020-05-26 2020-05-28        NaT        NaT
    5  Brandon    Smith 2020-05-12 2020-05-24 2020-05-17 2020-05-23
    6  Brandon    Smith 2020-05-26 2020-05-31        NaT        NaT
    7    Sarah  Roberts 2020-06-03 2020-06-25 2020-06-07 2020-06-20
    8    Sarah  Roberts 2020-06-15 2020-06-23        NaT        NaT
    

    【讨论】:

    • 感谢您的回答!关于索引 2,我犯了一个错误,但我认为它仍然应该从 6/14(星期日)到 6/20(星期六)显示
    • 你是对的。如果它从星期日开始或以星期六结束,我没有考虑特殊情况。我已经编辑了我的答案来解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2021-01-11
    • 2018-01-10
    相关资源
    最近更新 更多