首页 > 解决方案 > 如何在熊猫或python中分割具有特定范围的日期

问题描述

我有以下数据开始日期和结束日期,想编写一个函数,在以下条件下拆分日期

1:以 3 个月的间隔拆分。如果最后一次拆分少于 2 个月 .. 将日期范围添加到上一次拆分(例如:第 4 次拆分应该是 2018-08-01 到 2018-09-23 并且小于 2月,所以它添加到上一行)

function should be like 
def (start_date=none ,end_date= none)


ex: if Start_date= 17-01-01 end_date -2018-09-23  
Start_date   end_date    
2017-01-01   2017-03-31
2017-04-01   2017-06-31
2018-06-01   2018-09-23

提前致谢

标签: pythonpandasdataframe

解决方案


我将使用dateutil库来查找日期和datetime库之间的 2 个月差异来定义日期对象。

import datetime
from dateutil.relativedelta import relativedelta

假设输入是日期时间对象

start_date = datetime.date(2017,1,1)
end_date = datetime.date(2018,8,23)

我创建了一个列表来跟踪所有间隔的开始日期。

ls = []

我要将 start_date 附加到列表中,并使用 while 循环将 start_date 变量增加 3 个月。

当您使用relativedelta函数发现 end_date 小于 2 个月加上您的下一个 start_date 时打破循环。

您可以看到if条件是在 start_date 更新之后写入的。

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 和比下一个 start_date 少 1 天。对于最后一个元素,打印 start_date 和 end_date。

print('start_date','end_date')
for i in range(len(ls)-1):
    print(ls[i],ls[i+1]-datetime.timedelta(days=1))
print(ls[-1],end_date)

输出:

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

推荐阅读