2016-02-16 2 views
1

У меня есть DataFrame с доходностью для разных ценных бумаг в течение нескольких лет. Я хотел бы рассчитать корреляции в 100 дневных окнах в последний день каждого месяца.Расчет корреляции роллинг-окна для разного шага времени в пандах

rolcor = pd.rolling_corr(df2,window=100,pairwise = True) 

Date   Sec1   Sec2   Sec3   Sec4 .... 
... 
2006-01-24  0.000595  -0.009683  -0.004044  0.020969 .... 
2006-01-25  0.013976  0.024152  -0.001015  0.019122 .... 
2006-01-26  0.011730  0.008323  0.026423  -0.006254 .... 
2006-01-27  0.020290  0.000000  0.014851  0.004196 .... 
2006-01-30  0.046875  0.018937  0.000000  0.007660 .... 
2006-01-31  -0.049118  -0.014852  -0.006829  -0.005529 .... 
.... 

pd.rolling_corr делает расчеты, но они сделаны для всех точек данных в исходном DataFrame в то время как мне нужно только в последний день каждого месяца. Любые предложения, как это сделать?

ответ

0

Как я понимаю, вы только хотите, чтобы рассмотреть вопрос о цене в последний день месяца

periods = n 
index = pd.date_range('2006-01-31', periods=n, freq='M') 
print index 

DatetimeIndex(['2006-01-31', '2006-02-28', ... , '2006-10-31'], dtype='datetime64[ns]', freq='M') 

затем использовать это, чтобы нарезать из конечных значений месяца.

df2.loc[index] 

Что-то подсказывает мне, что это не то, что вы хотите?

+0

Это не так. В основном я хотел бы сделать то, что «pd.rolling_corr (df2, window = 100, pairwise = True)», но иметь корреляционные матрицы не для всех дат в df2, например, для конца месячные даты или на каждую 20-ю дату в df2. I.e. так что у возвращаемого DataFrame не были бы '2006-01-24, 2006-01-25, 2006-01-26, 2006-01-27, 2006-01-28, ...' даты, но 2006-01- 31, 2006-02-28, 2006-03-31, 2006-04-30, 2006-05-31, ... '. Я мог бы извлечь его из текущего результата 'pd.rolling_corr (df2, window = 100, pairwise = True)', но я хочу сократить время вычисления. – kbaltakys