2017-01-23 7 views
1

У меня есть ряд значений, и я ищу, чтобы вычислить корреляцию pearson с каждой строкой данной таблицы.Корреляция между рядами pandas и целым DataFrame

Как мне это сделать?

Пример:

import pandas as pd 

v = [-1, 5, 0, 0, 10, 0, -7] 
v1 = [1, 0, 0, 0, 0, 0, 0] 
v2 = [0, 1, 0, 0, 1, 0, 0] 
v3 = [1, 1, 0, 0, 0, 0, 1] 

s = pd.Series(v) 
df = pd.DataFrame([v1, v2, v3], columns=['a', 'b', 'c', 'd', 'e', 'f', 'g']) 

# Here I expect ot do df.corrwith(s) - but won't work 

Использование Series.corr() для расчета, ожидаемый выход

-0.1666666666666666 # correlation with the first row 
0.83914639167827343 # correlation with the second row 
-0.35355339059327379 # correlation with the third row 

ответ

1

Вам нужно же index из Series в columns из DataFrame для Align Series по DataFrame и добавить axis=1 в corrwith для по ряду причин:

s1 = pd.Series(s.values, index=df.columns) 
print (s1) 
a -1 
b  5 
c  0 
d  0 
e 10 
f  0 
g -7 
dtype: int64 

print (df.corrwith(s1, axis=1)) 
0 -0.166667 
1 0.839146 
2 -0.353553 
dtype: float64 

print (df.corrwith(pd.Series(v, index=df.columns), axis=1)) 
0 -0.166667 
1 0.839146 
2 -0.353553 
dtype: float64 

EDIT:

Вы можете указать столбцы и использовать подмножество:

cols = ['a','b','e'] 

print (df[cols]) 
    a b e 
0 1 0 0 
1 0 1 1 
2 1 1 0 

print (df[cols].corrwith(pd.Series(v, index=df.columns), axis=1)) 
0 -0.891042 
1 0.891042 
2 -0.838628 
dtype: float64 
+0

Спасибо, то, что новобранец ошибка ... именно то, что я не нужен – bluesummers

+0

Нет проблем, как вы бы об этом подумали, если бы в dataframe было больше столбцов, которые вы хотели бы игнорировать? что означает, что вы хотите вычислить корреляцию только с соответствующими столбцами для индексации, не обращая внимания на остальных. – bluesummers

+0

. Проверьте, измените ли это то, что вы хотите. – jezrael

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

  • Нет связанных вопросов^_^