В несколько строк:
rows_to_add = 10
new_dates = pd.DatetimeIndex([df.index[-1] + pd.DateOffset(years=y)
for y in range(rows_to_add)])
df.reindex(df.index.union(new_dates).unique().sort_values()).ffill()
A B C D
2014-01-01 1.0 0.0 0.0 0.0
2014-01-02 0.0 1.0 0.0 0.0
2014-01-03 0.0 0.0 1.0 0.0
2014-01-04 0.0 0.0 0.0 1.0
2015-01-04 0.0 0.0 0.0 1.0
2016-01-04 0.0 0.0 0.0 1.0
2017-01-04 0.0 0.0 0.0 1.0
2018-01-04 0.0 0.0 0.0 1.0
2019-01-04 0.0 0.0 0.0 1.0
2020-01-04 0.0 0.0 0.0 1.0
2021-01-04 0.0 0.0 0.0 1.0
2022-01-04 0.0 0.0 0.0 1.0
2023-01-04 0.0 0.0 0.0 1.0
Объяснено
Вы можете создать новые строки, выполнив:
rows_to_add = 10
new_dates = pd.DatetimeIndex([df.index[-1] + pd.DateOffset(years=y)
for y in range(rows_to_add)])
DatetimeIndex(['2014-01-04', '2015-01-04', '2016-01-04', '2017-01-04',
'2018-01-04', '2019-01-04', '2020-01-04', '2021-01-04',
'2022-01-04', '2023-01-04'],
dtype='datetime64[ns]', freq=None)
И затемдобавьте эти даты к исходным датам (сохраняя уникальные даты и отсортировав индекс):
new_index = df.index.union(new_dates).unique().sort_values()
DatetimeIndex(['2014-01-01', '2014-01-02', '2014-01-03', '2014-01-04',
'2015-01-04', '2016-01-04', '2017-01-04', '2018-01-04',
'2019-01-04', '2020-01-04', '2021-01-04', '2022-01-04',
'2023-01-04'],
dtype='datetime64[ns]', freq=None)
и затем переиндексируйте исходный кадр данных, заполняя новые строки значениями в последней строке:
df.reindex(new_index).ffill()
A B C D
2014-01-01 1.0 0.0 0.0 0.0
2014-01-02 0.0 1.0 0.0 0.0
2014-01-03 0.0 0.0 1.0 0.0
2014-01-04 0.0 0.0 0.0 1.0
2015-01-04 0.0 0.0 0.0 1.0
2016-01-04 0.0 0.0 0.0 1.0
2017-01-04 0.0 0.0 0.0 1.0
2018-01-04 0.0 0.0 0.0 1.0
2019-01-04 0.0 0.0 0.0 1.0
2020-01-04 0.0 0.0 0.0 1.0
2021-01-04 0.0 0.0 0.0 1.0
2022-01-04 0.0 0.0 0.0 1.0
2023-01-04 0.0 0.0 0.0 1.0