创建具有月份增量的日期列表,并停止增量小于 pandas 中的给定日期

Create list of dates with increment of months and stop increments less than given date in pandas

给定数据

Id start Date Frequency
1 10-10-2015 1
2 20–10-2016 2

我需要这种格式

Id start Date Frequency Date1 Dat2 Date3 Date4
1 10-10-2015 1 10-10-2016 10-10-2017 10-10-2018
2 20–10-2016 2 20-04-2017 20-10-2017 20-04-2018 20-10-2018

如果频率为1 日期递增1年且不应超过2018年。 如果频率为 2 日期递增 6 个月且不应超过 2018 年。

您可以 apply pd.date_range 在每一行上创建所需的日期,然后 join 返回原始 DataFrame:

df["start Date"] = pd.to_datetime(df["start Date"], format="%d-%m-%Y")
dates = df.apply(lambda x: pd.Series(pd.date_range(x["start Date"], 
                                                   "2018-12-31", 
                                                   freq=pd.DateOffset(months=12/x["Frequency"]))
                                                   ).add_prefix("Date"), axis=1)
output = df.join(dates.iloc[:,1:])

>>> output
   id start Date  Frequency      Date1      Date2      Date3      Date4
0   1 2015-10-10          1 2016-10-10 2017-10-10 2018-10-10        NaT
1   2 2016-10-20          2 2017-04-20 2017-10-20 2018-04-20 2018-10-20