Интересная проблема. Так как вы усредняете за пять месяцев, это делает повторную выборку более сложной. Вы должны быть в состоянии преодолеть это путем логической индексации и создания нового фрейма данных. Я предполагаю, что ваш индекс является значением даты и времени.
index = pd.date_range('1899 9 1', '1902, 3, 1', freq='1M')
data = np.random.randint(0, 100, (index.size, 5))
df = pd.DataFrame(index=index, data=data, columns=list('ABCDE'))
# find rows that meet your criteria and average
idx1 = (df.index.year==1899) & (df.index.month >10)
idx2 = (df.index.year==1900) & (df.index.month < 4)
winterAve = df.loc[idx1 | idx2, :].mean(axis=0)
Просто чтобы визуально убедиться, что индексация / нарезка делает то, что нам нужно ...
>>>df.loc[idx1 | idx2, :]
Out[200]:
A B C D E
1899-11-30 48 91 87 29 47
1899-12-31 63 5 0 35 22
1900-01-31 37 8 89 86 38
1900-02-28 7 35 56 63 46
1900-03-31 72 34 96 94 35
Вы должны иметь возможность поместить это в цикл for для повторения в течение нескольких лет и т. Д.