Метод
@ cᴏʟᴅsᴘᴇᴇᴅ более чист, чем этот, но сохраняя ваш метод pd.Grouper
, один из способов сделать это - объединить ваши данные с новым диапазоном дат, который начинается в начале десятилетия и заканчивается в конце десятилетия. , затем используйте ваш Grouper
на этом. Например, с учетом начального значения df
:
date data
0 1973-01-01 -1.097895
1 1973-01-02 0.834253
2 1973-01-03 0.134698
3 1973-01-04 -1.211177
4 1973-01-05 0.366136
...
15335 2014-12-27 -0.566134
15336 2014-12-28 -1.100476
15337 2014-12-29 0.115735
15338 2014-12-30 1.635638
15339 2014-12-31 1.930645
Объедините это с date_range
кадром данных в период с 1980 по 2020 год:
new_df = pd.DataFrame({'date':pd.date_range(start='01-01-1970', end='12-31-2019', freq='D')})
df = new_df.merge(df, on ='date', how='left')
И используйте свой Grouper
:
df.groupby(pd.Grouper(key='date', freq = '10AS')).mean()
Что дает вам:
data
date
1970-01-01 -0.005455
1980-01-01 0.028066
1990-01-01 0.011122
2000-01-01 0.011213
2010-01-01 0.029592
То же самое, но за один раз, может выглядеть так:
(df.merge(pd.DataFrame(
{'date':pd.date_range(start='01-01-1970',
end='12-31-2019',
freq='D')}),
how='right')
.groupby(pd.Grouper(key='date', freq = '10AS'))
.mean())