2015-10-29 2 views
4

вот моя проблема. Что у меня есть, DataFrame следующим образом:функции прокатки панды с временной группой

df: 

2013-10-24  1 
2013-10-25  2 
2013-11-27  3 
2013-11-28  4 
2013-12-01  5 
2013-12-02  6 

То, что я хочу, это DataFrame такие, как это:

rolling_mean (ДФ, окно = '1М'):

2013-10  1.5 
2013-11  3.5 
2013-12  5.5 

rolling_mean (DF, окна = '2М'):

2013-10  NAN 
2013-11  2.5 
2013-12  4.5 

rolling_mean (DF, окна = '3M'):

2013-10  NAN 
2013-11  NAN 
2013-12  3.5 

rolling_mean (ДФ, окно = '1Y'):

2013-10  NAN 
2013-11  NAN 
2013-12  NAN 

где 1М '1 месяц', 2М '2 месяца. Окно не является значением int, а временным интервалом, таким как «1D», «3M», «1Y» и т. Д. Эта функция может группировать данные по временному модулю, таким как «D», «M», «Y», а затем прокатывать блок данных через номер до единицы времени, такой как 1, 3 ...

Мне нужно такая функция качения такая? Может ли кто-нибудь мне помочь? Я дал ясное описание? Большое спасибо.

Update:

Я до сих пор загадка. Мне нужно реализовать такую ​​функцию, которая могла бы вычислять стандартное отклонение от календарного дня каждый день, а не повторять выбор по месяцам, но блок шага окна взвешивается по месяцам.

В этом случае , что у меня есть также ДФ:

2013-10-24  1 
2013-10-25  2 
2013-11-27  3 
2013-11-28  4 
2013-12-01  5 
2013-12-02  6 

pd.rolling_std (df.resample ('1M'), окно = 1):

В результате

2013-10 NAN 
2013-11 NAN 
2013-12 NAN 

, что я на самом деле в dataframe, как это (окно = 1):

2013-10 0.5 
2013-11 0.5 
2013-12 0.5 

Первый 0.5 - стандартное отклонение, которое может быть рассчитано np.sqrt ([1,2]) с октября. Также 0,5 из других представлены в [3,4] и [5,6]. Однако, независимо от метода how = 'xxx' в функции resample, результат неверен. Задача результат 2months есть,

DF (окно = 2):

2013-10 NAN 
2013-11 1.1180 
2013-12 1.1180 

Первый 1,1180 представляет собой стандартное отклонение, которое можно рассчитать с помощью np.sqrt ([1,2,3,4 ]) с октября и ноября. 1.1180 из 2013-12 из [3,4,5,6] 2013-11 и 2013-12 годов.

p.s. Стандартное отклонение является одной из моих функций, которые я хочу реализовать качению ... СПАСИБО ~

+0

Я думаю, что 'freq' пары из' rolling_mean' является то, что вы после этого, но вы должны datetimeindex для этого, чтобы работать – EdChum

+0

могли бы вы показать мне простой пример код? Новое к пандам, спасибо u! @EdChum – diaosihuai

ответ

2

Вы можете использовать to_datetime на колонке даты, чтобы сгенерировать datetimeindex.

df = pd.DataFrame({'value': [1, 2, 3, 4, 5, 6]}, 
        index=['2013-10-24', '2013-10-25', '2013-11-27', 
         '2013-11-28', '2013-12-01', '2013-12-02'])   
df.index = pd.to_datetime(df.index) 

>>> pd.rolling_mean(df.resample('1M'), 1, freq='1M') 
      value 
2013-10-31 1.5 
2013-11-30 3.5 
2013-12-31 5.5 

>>> pd.rolling_mean(df.resample('2M'), window=1, freq='1M') 
      value 
2013-10-31 1.5 
2013-11-30 NaN 
2013-12-31 4.5 

>>> pd.rolling_mean(df.resample('1M'), window=2, freq='1M') 
      value 
2013-10-31 NaN 
2013-11-30 2.5 
2013-12-31 4.5 

>>> pd.rolling_mean(df.resample('1M'), window=3, freq='1M') 
      value 
2013-10-31 NaN 
2013-11-30 NaN 
2013-12-31 3.5 

>>> pd.rolling_mean(df.resample('1M'), window=12, freq='1M') 
      value 
2013-10-31 NaN 
2013-11-30 NaN 
2013-12-31 NaN 
+0

Хорошо для вас! @ Александр не мог бы мне помочь мне разобраться в моем новом замешательстве? – diaosihuai

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