【问题标题】:Python: Calculating week number of month based on specific start and end datesPython:根据特定的开始和结束日期计算月份的周数
【发布时间】:2020-08-30 05:18:56
【问题描述】:

我正在寻找本月的当前周。这里已经有很多答案,但我有以下情况:

  1. 每周从周日到周六开始

  2. 当月份发生变化时,应考虑大多数日期。例如,2020 年 3 月 30 日是 4 月的第 1 周,因为在该周内,有 3 个日期为 3 月(29、30、31),但有 4 个日期为 4 月(1、2、3、4)。

  3. 示例开始日期和结束日期如下所示:

        start date  end date
Jan 1   12/29/2019  2/1/2020
Feb 2   2/2/2020    2/29/2020
Mar 3   3/1/2020    3/28/2020
Apr 4   3/29/2020   5/2/2020
May 5   5/3/2020    5/30/2020
Jun 6   5/31/2020   6/27/2020
Jul 7   6/28/2020   8/1/2020
Aug 8   8/2/2020    8/29/2020
Sep 9   8/30/2020   9/26/2020
Oct 10  9/27/2020   10/31/2020
Nov 11  11/1/2020   11/28/2020
Dec 12  11/29/2020  12/26/2020

我是通过 pd.merge 完成的,我在其中创建了 1 年的完整表格,我可以查找并找到日期,但我正在寻找不需要每年更新的自动化内容。

【问题讨论】:

  • 抱歉,您的问题确实不清楚。这似乎更像是一个分析设计问题,而不是一个编程问题。如果是这样,请尝试堆栈交换网络站点code reviewsoftware engineering。无论哪种情况,您都需要发布您尝试过的代码 - 没有任何“请为我编写代码”网站。希望这会有所帮助!
  • @MichaelDelgado:请在下面的答案中查看我的方法。这是一种手动方式。我正在寻找更精确的东西,它不会涉及每年手动更新 df_week 表。

标签: python pandas datetime python-datetime


【解决方案1】:

我创建了一个完整年份的表格,如下所示: (我已经截断了下面的数据框以节省空间,但它会一直持续到年底)

df_week

    Month   Week    1   2   3   4   5   6   7
0   Jan W1  2019-12-29  2019-12-30  2019-12-31  2020-01-01  2020-01-02  2020-01-03  2020-01-04
1   Jan W2  2020-01-05  2020-01-06  2020-01-07  2020-01-08  2020-01-09  2020-01-10  2020-01-11
2   Jan W3  2020-01-12  2020-01-13  2020-01-14  2020-01-15  2020-01-16  2020-01-17  2020-01-18
3   Jan W4  2020-01-19  2020-01-20  2020-01-21  2020-01-22  2020-01-23  2020-01-24  2020-01-25
4   Jan W5  2020-01-26  2020-01-27  2020-01-28  2020-01-29  2020-01-30  2020-01-31  2020-02-01
5   Feb W1  2020-02-02  2020-02-03  2020-02-04  2020-02-05  2020-02-06  2020-02-07  2020-02-08
6   Feb W2  2020-02-09  2020-02-10  2020-02-11  2020-02-12  2020-02-13  2020-02-14  2020-02-15

然后我使用了以下内容:

# Finds today's date in YYYY-MM-DD format
>d = dt.datetime.today().strftime("%Y-%m-%d") 

#Find matching row in complete dataframe corresponding to the current date
>cal_week = df_week[df_week.eq(d).any(1)]["Week"].iat[0] 
>cal_week 
W2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多