首页 > 解决方案 > Python:从 Pandas 的周数和年份计算一周的开始日期和结束日期

问题描述

我用代码创建了下表

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

新文件:

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

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

标签: pythonpython-3.xpandasdataframe

解决方案


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

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

推荐阅读