Python 基于自定义开始日期创建每两周一次的变量
我使用“get biweekly variable in python”进行了一些简单的搜索,但是没有找到很多有用的帖子,所以我想在这里发布我的问题 我有一个数万条记录的数据框。数据框包含整个会计年度的记录。每个记录都有一个日期时间变量Python 基于自定义开始日期创建每两周一次的变量,python,Python,我使用“get biweekly variable in python”进行了一些简单的搜索,但是没有找到很多有用的帖子,所以我想在这里发布我的问题 我有一个数万条记录的数据框。数据框包含整个会计年度的记录。每个记录都有一个日期时间变量CHECKIN\u DATE\u TIME。我想创建一个从2019年6月30日开始的双周变量 ID CHECKIN_DATE_TIME 1 2019-06-30 13:36:00 2 2019-06-30 14:26:00 3
CHECKIN\u DATE\u TIME
。我想创建一个从2019年6月30日开始的双周变量
ID CHECKIN_DATE_TIME
1 2019-06-30 13:36:00
2 2019-06-30 14:26:00
3 2019-06-30 20:10:00
4 2019-06-30 21:27:00
....
51 2019-07-10 13:36:00
52 2019-07-10 10:26:00
53 2019-07-10 10:10:00
54 2019-07-10 23:27:00
....
我希望一个新的数据框看起来像这样,其中2019年6月30日-2019年7月13日为第一周,2019年7月14日至2019年7月27日为第二周,依此类推,直到2020年6月28日结束。因此,周
变量中有26周,每周代表2周的时间范围
编辑并将周范围内的最后一天指定给周编号
ID CHECKIN_DATE_TIME Week Date
1 2019-06-30 13:36:00 1 7/13/2019
2 2019-06-30 14:26:00 1 7/13/2019
3 2019-06-30 20:10:00 1 7/13/2019
4 2019-06-30 21:27:00 1 7/13/2019
....
51 2019-07-20 13:36:00 2 7/27/2019
52 2019-07-20 10:26:00 2 7/27/2019
53 2019-07-20 10:10:00 2 7/27/2019
54 2019-07-20 23:27:00 2
....
您可以通过确定入住日期和2019-06-30之间的天数,然后按14进行楼层划分来完成此操作
df['CHECKIN_DATE_TIME'] = pd.to_datetime(df.CHECKIN_DATE_TIME)
df['week'] = (df.CHECKIN_DATE_TIME - pd.datetime(2019, 6, 30)).dt.days // 14 + 1
df['last_week_day'] = (pd.to_timedelta(-((df.CHECKIN_DATE_TIME - pd.datetime(2019,6,30)).dt.days % 14) + 13 ,'d') + df.CHECKIN_DATE_TIME).dt.date
# note I've created my own test set.
ID CHECKIN_DATE_TIME week last_week_day
0 1 2019-06-30 13:36:00 1 2019-07-13
1 2 2019-07-10 10:36:00 1 2019-07-13
2 3 2019-07-12 02:36:00 1 2019-07-13
3 4 2019-07-18 18:36:00 2 2019-07-27
4 5 2019-07-30 11:36:00 3 2019-08-10
5 6 2019-08-01 20:36:00 3 2019-08-10
编辑:根据评论中的请求,添加了
上周\u天
。这是通过使用模运算符%
计算签入日期时间
列所需的天数来完成的,谢谢,但这会产生以下错误“TypeError:不支持的操作数类型-:'str'和'datetime.datetime'”。啊,我假设签入日期时间是datetime类型,我已经更新了答案以将其转换为正确的类型。这可以正常工作,但最后一个与日期-时间转换相关的错误警告是:SettingWithCopyWarning:试图在数据帧切片的副本上设置值。尝试使用.loc[row\u indexer,col\u indexer]=value代替。很可能在运行此代码之前,您对原始数据帧做了一个切片,这与当前问题无关。这也只是一个警告,因为它可能产生的影响和解决方案请参见:根据此请求调整了答案,如果要在共享环境中使用此选项,您可能需要简化oneliner以提高可读性。