创建具有月份增量的日期列表,并停止增量小于 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
给定数据
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