Использование повторной выборки для выравнивания нескольких временных рядов в pandas

Вот код установки:

import pandas
from datetime import datetime

a_values = [1728, 1635, 1733]
a_index = [datetime(2011, 10, 31), datetime(2012, 1, 31), datetime(2012, 4, 30)]
a = pandas.Series(data=a_values, index=a_index)

aa_values = [6419, 5989, 6006]
aa_index = [datetime(2011, 9, 30), datetime(2011, 12, 31), datetime(2012, 3, 31)]
aa = pandas.Series(data=aa_values, index=aa_index)

apol_values = [1100, 1179, 969]
apol_index = [datetime(2011, 8, 31), datetime(2011, 11, 30), datetime(2012, 2, 29)]
apol = pandas.Series(data=apol_values, index=apol_index)

Вот как данные выглядят в таблице (3-е значение для APOL не показано):

введите здесь описание изображения

Цель состоит в том, чтобы привести данные в соответствие с отметками кварталов календаря, чтобы можно было сравнить 3 набора данных. Просто взглянув на даты ниже, март 2012 г., декабрь 2011 г. и сентябрь 2011 г. кажутся разумными маркерами для выравнивания.

Вот результат с fill_method='ffill':

In [6]: a.resample('Q', fill_method='ffill')
Out[6]: 
2011-12-31    1728
2012-03-31    1635
2012-06-30    1733
Freq: Q-DEC

In [7]: aa.resample('Q', fill_method='ffill')
Out[7]: 
2011-09-30    6419
2011-12-31    5989
2012-03-31    6006
Freq: Q-DEC

In [8]: apol.resample('Q', fill_method='ffill')
Out[8]: 
2011-09-30    1100
2011-12-31    1179
2012-03-31     969
Freq: Q-DEC

Что выглядит так:

введите здесь описание изображения

Обратите внимание, что самые последние числа в каждой серии не совпадают.

А вот вывод с fill_method='bfill':

In [9]: a.resample('Q', fill_method='bfill')
Out[9]: 
2011-12-31    1635
2012-03-31    1733
2012-06-30     NaN
Freq: Q-DEC

In [10]: aa.resample('Q', fill_method='bfill')
Out[10]: 
2011-09-30    6419
2011-12-31    5989
2012-03-31    6006
Freq: Q-DEC

In [11]: apol.resample('Q', fill_method='bfill')
Out[11]: 
2011-09-30    1179
2011-12-31     969
2012-03-31     NaN
Freq: Q-DEC

Что выглядит так:

введите здесь описание изображения

Опять же, самые последние числа в ряду не совпадают.

Это ожидаемый результат resample() в этом сценарии?

Что я могу сделать, чтобы получить результаты, в которых последние 3 числа выше выровнены, а все остальное следует правильно?

EDIT: вот как выглядит желаемый результат:

введите здесь описание изображения


person dshap    schedule 01.11.2012    source источник
comment
Можете ли вы показать нам окончательный результат, который вы хотите, чтобы убедиться, что мы понимаем, чего вы хотите достичь.   -  person root    schedule 02.11.2012
comment
только что отредактировал вопрос и добавил желаемый окончательный результат. цель (если это не само собой разумеется) состоит в том, чтобы получить это программно, поэтому настройка различных параметров повторной выборки для каждой серии каким-либо неавтоматически обнаруживаемым способом, к сожалению, бесполезна.   -  person dshap    schedule 02.11.2012
comment
@root, имеет ли смысл мой желаемый результат? что-то не так с вопросом? (я вижу, был минус). большое тебе спасибо.   -  person dshap    schedule 02.11.2012
comment
@ dshap - добавил ответ, это должно быть довольно близко. по крайней мере, вы должны иметь представление, как это сделать   -  person root    schedule 02.11.2012
comment
Проголосовали за открытие. Это не слишком локализовано.   -  person Roger Dahl    schedule 02.07.2014


Ответы (1)


df1 = DataFrame({'a':a})
df2 = DataFrame({'aa':aa})
df3 = DataFrame({'apol':apol})
df=df1.append([df2,df3]).sort_index()
print df.resample('Q-APR',loffset='-1m').T

Выход:

      2011-09-30  2011-12-31  2012-03-31
a           1728        1635        1733
aa          6419        5989        6006
apol        1100        1179         969
person root    schedule 01.11.2012