Вы можете использовать pd.date_range()
:
pd.date_range(start = '2019-05-31', periods = 100,freq='M')
Вы можете изменить общее количество периодов в зависимости от того, что вам нужно, freq='M'
означает частоту окончания месяца
Здесь - это список смещенных псевдонимов, которые вы можете задать для параметра freq
.
Если вы просто хотите добавить или вычесть некоторый период к дате, вы можете использовать pd.DataOffset
:
odate = pd.Timestamp('20191031')
odate
>> Timestamp('2019-10-31 00:00:00')
odate - pd.DateOffset(months=4)
>> Timestamp('2019-06-30 00:00:00')
odate + pd.DateOffset(months=4)
>> Timestamp('2020-02-29 00:00:00')
Чтобы добавить указанный столбец периода к концу месяца:
odate = pd.Timestamp('20190531')
df['date'] = df.period.apply(lambda x: odate + pd.offsets.MonthEnd(x-1))
df
period value date
0 1 5.5 2019-05-31
1 2 5.0 2019-06-30
2 4 6.2 2019-08-31
3 3 5.0 2019-07-31
4 5 40.0 2019-09-30
5 11 5.0 2020-03-31
Для повышения производительности используйте list-comprehension
:
df['date'] = [odate + pd.offsets.MonthEnd(period-1) for period in df.period]