Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于自定义开始日期创建每两周一次的变量_Python - Fatal编程技术网

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

我使用“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       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以提高可读性。