首页 > 解决方案 > Pandas Datetime:将开始日期和结束日期拆分为 n 个月的折叠

问题描述

假设您有两个 pandas 日期时间:from_dateend_date. 我需要一个将其拆分为数n月的函数(比如说n=3)。例如:

import pandas as pd

from_date = pd.to_datetime("2020-02-15")
to_date = pd.to_datetime("2020-05-20")

应该分成2折:

{
"1": {"from_date": 2020-02-15, "to_date": 2020-05-15}, 
"2": {"from_date": 2020-05-16, "to_date": 2020-05-20}
}

每个折叠需要满足条件: from_date + pd.DateOffset(months=2) >= end_date. 因此,这与开始日期和结束日期之间的天数无关。

最pythonic的方法是什么?熊猫有什么东西吗?

标签: pythonpandasdatedatetime

解决方案


根据您希望使用 2 个日期的方式替换相应的打印语句!

根据如何使用 datetime Python 模块计算距当前日期六个月的日期?dateutil.relativedelta可以帮助解决那些有和没有第 31 天的月份!

import pandas as pd
from dateutil.relativedelta import relativedelta

from_date = pd.to_datetime("2020-02-15")
to_date = pd.to_datetime("2020-05-20")
fold = 0
result = {}


while from_date+relativedelta(months=+3)<to_date:
    curfrom = from_date #retain current 'from_date'
    from_date =from_date+relativedelta(months=+3)
    result[fold] = {"from_date": curfrom, "to_date": from_date}
    fold = fold+1
    from_date = from_date + relativedelta(days=+1) #So that the next 'from_date' starts 1 day after
result[fold] = {"from_date": curfrom, "to_date": to_date}

print(result)

推荐阅读