2017-01-23 5 views
1

일련의 값을 가지고 있으며 주어진 테이블의 모든 행과 피어슨 상관 관계를 계산하려고합니다.팬더 시리즈와 전체 데이터 프레임 간의 상관 관계

어떻게하면됩니까?

예 : 계산 Series.corr()를 사용

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 

, 예상 출력

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

답변

1

입니다 당신은 DataFrame에 의해 정렬 Series에 대한 DataFramecolumnsSeries의 같은 index 필요에 대한 corrwithaxis=1 추가 행간 상관 :

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 

편집 :

당신은 열 사용의 부분 집합을 지정할 수 있습니다

:

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

아무 문제가 필요하지 정확히 무엇을, 어떻게 데이터 프레임에 더 많은 열이 있다면 무시하고 싶습니까? 다른 항목을 무시하면서 색인을 생성 할 일치하는 열과의 상관 관계 만 계산하려는 것입니다. – bluesummers

+0

원하는 항목인지 확인하십시오. – jezrael