我是python的新手,对日期有一些问题。
这里有一个例子-我有一个日期列表,从2012年1月1日到2025年1月,每月一次。它们也将根据数据帧进行更改。假设一列日期之间有130个月,另一列有140个月,依此类推
最终目标是:无论每套有多少个月,我都需要每一个"组";有180个月。因此,在上面2012年1月1日至2025年1月的例子中,我需要增加足够的月份才能达到2027年1月。
请告诉我这是否合理。
所以,如果我正确理解你,你有一些数据,比如:
import pandas as pd, numpy as np
from datetime import date
from dateutil.relativedelta import relativedelta
from random import randint
starts = [dt for i in range(130) if (dt := date(2012, 1, 1) + relativedelta(months=i)) <= date(2020, 1, 1)]
ends = [dt + relativedelta(months=randint(1, 5)) for dt in starts]
df = pd.DataFrame({ 'start': starts, 'end': ends })
因此当前的持续时间(以月为单位(为:
df['duration'] = ((df.end - df.start)/np.timedelta64(1, 'M')).round().astype(int)
你想知道要加多少才能使持续时间达到180个月吗?
df['need_to_add'] = 180 - df.duration
然后你可以用这样的方法计算一个新的终点
def add_months(start_date, delta_period):
end_date = start_date + relativedelta(months=delta_period)
return end_date
df['new_end'] = df.apply(lambda r: add_months(r['end'], r['need_to_add']), axis=1)
我肯定我还没有完全理解,因为你可以在开始日期后再加180个月,但希望这能让你接近你需要的位置。