Одним из решений является перенаправление заполнения с использованием параметра limit, но это не будет обрабатывать високосный год:
df.fillna(mehotd='ffill', limit=365)
Второе решение заключается в определении более надежной функции для выполнения прямого заполнения в 1. -годное окно:
from pandas.tseries.offsets import DateOffsets
def fun(serie_df):
serie = serie_df.copy()
indexes = serie[~serie.isnull()].index
for idx in indexes:
mask = (serie.index >= idx) & (serie.index < idx+DateOffset(years=1))
serie.loc[mask] = serie[mask].fillna(method='ffill')
return serie
df_filled = df.apply(fun, axis=0)
Если столбец имеет несколько значений, отличных от нан, в одном и том же 1-летнем окне, то первая заливка будет остановлена при обнаружении самого последнего значения. Второе решение будет обрабатывать последовательные значения, как если бы они были независимыми.