如何在pandas或python中按特定范围拆分日期
我有下面的数据开始日期和结束日期,想写一个函数,在下面的条件下分割日期 1:间隔3个月进行拆分。如果最后一次拆分少于2个月。。将日期范围添加到上一次拆分(例如:第四次拆分应为2018-08-01至2018-09-23,由于其少于2个月,因此添加到上一行)如何在pandas或python中按特定范围拆分日期,python,pandas,dataframe,Python,Pandas,Dataframe,我有下面的数据开始日期和结束日期,想写一个函数,在下面的条件下分割日期 1:间隔3个月进行拆分。如果最后一次拆分少于2个月。。将日期范围添加到上一次拆分(例如:第四次拆分应为2018-08-01至2018-09-23,由于其少于2个月,因此添加到上一行) 提前感谢我将使用dateutil库查找日期和datetime库之间的2个月差异,以定义日期对象 import datetime from dateutil.relativedelta import relativedelta 假设输入是dat
提前感谢我将使用dateutil库查找日期和datetime库之间的2个月差异,以定义日期对象
import datetime
from dateutil.relativedelta import relativedelta
假设输入是datetime对象
start_date = datetime.date(2017,1,1)
end_date = datetime.date(2018,8,23)
我创建了一个列表来跟踪所有时间间隔的开始日期
ls = []
我将把开始日期附加到列表中,并使用while循环更新开始日期变量,增加3个月
使用relativedelta功能发现结束日期小于2个月加上下一个开始日期时,打破循环
如果在开始日期更新后写入了条件,则可以看到
while True:
ls.append(start_date)
start_date = start_date + relativedelta(months=3)
if end_date < start_date + relativedelta(months=2):
break
if start_date > end_date:
break
输出:
start_date end_date
2017-01-01 2017-03-31
2017-04-01 2017-06-30
2017-07-01 2017-09-30
2017-10-01 2017-12-31
2018-01-01 2018-03-31
2018-04-01 2018-08-23
first last
0 2018-03-01 2018-03-03
1 2018-03-04 2018-03-06
2 2018-03-07 2018-03-09
3 2018-03-10 2018-03-11
我将使用dateutil库查找日期之间的2个月差异,并使用datetime库定义日期对象
import datetime
from dateutil.relativedelta import relativedelta
假设输入是datetime对象
start_date = datetime.date(2017,1,1)
end_date = datetime.date(2018,8,23)
我创建了一个列表来跟踪所有时间间隔的开始日期
ls = []
我将把开始日期附加到列表中,并使用while循环更新开始日期变量,增加3个月
使用relativedelta功能发现结束日期小于2个月加上下一个开始日期时,打破循环
如果在开始日期更新后写入了条件,则可以看到
while True:
ls.append(start_date)
start_date = start_date + relativedelta(months=3)
if end_date < start_date + relativedelta(months=2):
break
if start_date > end_date:
break
输出:
start_date end_date
2017-01-01 2017-03-31
2017-04-01 2017-06-30
2017-07-01 2017-09-30
2017-10-01 2017-12-31
2018-01-01 2018-03-31
2018-04-01 2018-08-23
first last
0 2018-03-01 2018-03-03
1 2018-03-04 2018-03-06
2 2018-03-07 2018-03-09
3 2018-03-10 2018-03-11
输出:
start_date end_date
2017-01-01 2017-03-31
2017-04-01 2017-06-30
2017-07-01 2017-09-30
2017-10-01 2017-12-31
2018-01-01 2018-03-31
2018-04-01 2018-08-23
first last
0 2018-03-01 2018-03-03
1 2018-03-04 2018-03-06
2 2018-03-07 2018-03-09
3 2018-03-10 2018-03-11
输出:
start_date end_date
2017-01-01 2017-03-31
2017-04-01 2017-06-30
2017-07-01 2017-09-30
2017-10-01 2017-12-31
2018-01-01 2018-03-31
2018-04-01 2018-08-23
first last
0 2018-03-01 2018-03-03
1 2018-03-04 2018-03-06
2 2018-03-07 2018-03-09
3 2018-03-10 2018-03-11
你的问题似乎有点不清楚。你能把你的问题通读一遍,看看你是否清楚地解释了你需要什么吗?你的问题似乎有点不清楚。你能把你的问题通读一遍,看看你是否清楚地解释了你需要什么吗?