2017-01-29 2 views
0

У меня есть дата-карта с 500 столбцами, индексированными по дате, с четырьмя годами данных.Вычислительная корреляция Dataframe для каждой векторной строки по индексу Python

| Дата | A | AAL | AAP | AAPL | ABC ...

| 1/2/2004 | 18.442521 | 25.954398 | 1 38449 | 11.528444 ...

| 1/5/2004 | 18.922795 | 25.718507 | 1.442394 | 11.919131 ...

| 1/6/2004 | 19.518334 | 26.177538 | 1.437189 | 11.870028 ....

. . . и т. д.

Я хотел бы рассчитать корреляционную матрицу Пирсона для каждого дня, поэтому каждая строка. Я хочу сохранить матрицы по дате, в наиболее удобном для использования в пространстве образом, читаемом Р. (Сейчас моя цель - отдельные листы по дате индексов в Excel. Я открыт для предложений.)

Я пробовал несколько но это казалось самым многообещающим, потому что я не мог применить corr() к df.groupby.

Однако этот метод возвратил пустые информационные кадры, и теперь я застрял! Я ищу метод, который не предполагает итерации.

def do_Corr(df_group): 
"""Apply the function to each group in the data and return one result.""" 
X = df_group.corr() 
return X 

df.groupby([df.index.year,df.index.month,df.index.day]).apply(do_Corr).dropna() 
+1

Извините, я не понимаю, какие матрицы корреляции вы хотите произвести. Что значит «Я хочу сохранить матрицы по дате»? Вам нужна одна матрица для каждой даты? Если да, то какие векторы? (Если вы исправите дату, у вас есть только одна строка, верно?) Не могли бы вы предоставить более конкретное описание, например, например. очень короткую версию блока данных и расчеты, которые вы хотите выполнить (возможно, с циклами и т. д., чтобы просто понять, для чего это цель). –

+0

Да, одна матрица для каждой даты. Векторами будет то, что один ряд, например: на 1/4/2004 (18.442521, 25.954398, 1.38449, 11.528444, ....), где каждое значение соответствует другой цене акций. Существует очень короткая версия dataframe уже в вопросе! –

+1

Одна строка - один вектор, не так ли? Чтобы вычислить корреляцию, вам нужны два вектора. Чтобы вычислить корреляционную матрицу, вам нужно несколько векторов. Поэтому я все еще не понимаю, что вы пытаетесь вычислить. –

ответ

0

Возможно, вы захотите df.T.corr(). .T переносит фрейм данных, поэтому строки становятся столбцами, тогда вы можете применить метод .corr().

+0

Благодарим за помощь! –

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