2013-08-28 2 views
1

У меня есть временная серия ежемесячных данных. Я хотел бы суммировать совокупность значений по годам, но затем сохранить исходный индекс TimeSeries. Это, вероятно, лучше всего проиллюстрировать на примере:Pandas суммирует значения по годам, но сохраняет исходный индекс TimeSeries

# April 2012 to Nov 2053 
dates = pd.date_range('2012-04-01',periods=500,freq='MS') 

# Random time series over date range 
a = pd.Series(np.arange(500), index=dates) 

# Almost works but I'm missing the last 7 months: 
# May 2053 to Nov 2053 
b = a.resample('AS-APR', how='sum').resample('MS', fill_method='pad') 

Любая идея, как я могу получить b содержать полные 500 периодов времени, включая недостающие 7 месяцев? Они должны быть заполнены колодками от значения в апреле 2053.

ответ

1

Использование переиндексации вместо:

b = a.resample('AS-APR', how='sum').reindex(a.index, method='pad') 

Таким образом, вы получите тот же индекс, что и исходный объект Series, проложенные, как вы хотели.

Проблема с resample заключается в том, что при первом повторном выборе a последняя запись станет апрель 2053. Итак, когда вы делаете вторую повторную выборку, дата окончания будет 2053-04-01. Таким образом, он сделал правильную повторную выборку, но первая перенесла дату окончания с ноября на апрель.

Если вы хотите сделать другую частоту, чем исходный массив, вы могли бы сделать это еще раз, используя этот метод:

b = a.resample('AS-APR', how='sum').reindex(a.resample('D').index, method='pad') 
+0

Спасибо. Не знаю, почему я не мог найти это в документации, но я подумал, что могу получить более быстрый ответ здесь, чем продолжать пробок. –

Смежные вопросы