如何在pandas或python中按特定范围拆分日期

如何在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

我有下面的数据开始日期和结束日期,想写一个函数,在下面的条件下分割日期

1:间隔3个月进行拆分。如果最后一次拆分少于2个月。。将日期范围添加到上一次拆分(例如:第四次拆分应为2018-08-01至2018-09-23,由于其少于2个月,因此添加到上一行)


提前感谢

我将使用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

你的问题似乎有点不清楚。你能把你的问题通读一遍,看看你是否清楚地解释了你需要什么吗?你的问题似乎有点不清楚。你能把你的问题通读一遍,看看你是否清楚地解释了你需要什么吗?