【问题标题】:Python: Calculating Start Date and End Date of a week from the Week Number & Year From PandasPython:从 Pandas 的周数和年份计算一周的开始日期和结束日期
【发布时间】:2020-11-04 02:07:34
【问题描述】:

我用代码创建了下表

 newdf['Year_Date'] = pd.DatetimeIndex(newdf['AbsenceBegDate']).year
 newdf['Week_Number'] = pd.DatetimeIndex(newdf['AbsenceBegDate']).week
 newdf.drop('AbsenceBegDate', axis=1, inplace=True)

newdf:

Emp_ID        Year_Date       Week_Number        Salary         Hours_Worked
5500            2019              30              300              30
3300            2019              31              350              31
3300            2019              32              400              35

我需要从周数和年份中添加两列该周的开始日期和结束日期

例如,

Emp_ID        Year_Date       Week_Number        Salary         Hours_Worked     Start_Date      End_Date
5500            2019              30              300              30            07/25/2019        07/31/2019
3300            2019              31              350              31             08/01/2019       08/07/2019
3300            2019              32              400              35            08/08/2019        08/15/2019

你能告诉我如何提取这个开始日期和结束日期吗?感谢您的帮助

【问题讨论】:

  • Start_DateEnd_Date 中的日期应该从哪里来?他们应该来自Week_Number吗?在您的代码中,您引用了AbsenceBegDate,但您没有提供该列的数据。
  • 在那之后我删除了该列。我在我的代码中添加了它。开始日期应该是周数和年份的最小日期。结束日期应该是该周数和年份的最大日期
  • 应该从一周中的哪一天开始?另外,您认为一年中的第一周是哪一周?

标签: python python-3.x pandas dataframe


【解决方案1】:

您可以创建一个函数来执行此操作: 首先定义从哪里开始。例如,您可以将今天作为开始日期,您当然可以根据自己的需要进行调整:

today    = date.today()
Week     = today.isocalendar()[1]
pastWeek = Week-1
year     = 2020

然后定义这个函数:

def get_dates(year, week):
     d = date(year,1,1)
     if(d.weekday()<= 3):
         d = d - timedelta(d.weekday())             
     else:
         d = d + timedelta(7-d.weekday())
     dlt = timedelta(days = (week-1)*7)
     return d + dlt,  d + dlt + timedelta(days=6)

已经做到了:

X = get_dates(year, (pastWeek-1) )

这为您提供了足够的信息来完成这项工作:

Startdate       = str(X[0])
Enddate         = str(X[1])
StartdateNew    = pd.to_datetime(Startdate).date()
EnddateNew      = pd.to_datetime(Enddate).date()
StartdateNew2   = StartdateNew.strftime('%Y%m%d') 
EnddateNew2     = EnddateNew.strftime('%Y%m%d')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多