2017-12-18 28 views
0

나는 인접 쌍의 상관 관계, 다이빙 열이

print(df) 
    SAS_a1 SAS2_a1 SAS3_a1 FDF_b1 FDF2_b1 
0 0.673114 0.745755 0.989468 0.498920 0.837440 
1 0.811218 0.392196 0.505301 0.615603 0.946847 
2 0.252856 0.709125 0.321580 0.826123 0.224813 
3 0.566833 0.738661 0.626808 0.815460 0.003738 
4 0.102995 0.171741 0.246565 0.784519 0.980965 

은 내가 B1 대 A1로 끝나는 열 사이 페어의 상관 관계를 원 pearsonr를 사용하여 페어의 상관 관계를 목표로하고 있지만, 다음과 같은 dataframe 있습니다. 최종 결과는 다음과 같아야합니다.

     PCC p-value 
SAS_a1__FDF_b1 -0.293373 0.631895 
SAS_a1__FDF2_b1 -0.947724 0.014235 
SAS2_a1__FDF_b1 0.771389 0.126618 
SAS2_a1__FDF2_b1 e 0.132380 0.831942 
SAS3_a1__FDF_b1 0.422249 0.478808 
SAS3_a1__FDF2_b1 0.346411 0.567923 

제안 사항은 훌륭합니다. !!! 여기 는 나도 몰라, 내가 뭘하려

columns = df.columns.tolist() 
for col_a, col_b in itertools.combinations(columns, 2): 
    correlations[col_a + '__' + col_b] = pearsonr(df.loc[:, col_a], df.loc[:, col_b]) 
results = DataFrame.from_dict(correlations, orient='index') 
results.columns = ['PCC', 'p-value'] 

답변

3

않는 경우, 가장 우아한 해결책하지만 당신은 관련 열이 포함 된 목록을 작성하는 지능형리스트를 사용할 수 있습니다

import pandas as pd 
from scipy.stats import pearsonr 
result = pd.DataFrame() 
for a1 in [column for column in df.columns if 'a1' in column]: 
    for b1 in [column for column in df.columns if 'b1' in column]: 
    result = result.append(
       pd.Series(
       pearsonr(df[a1],df[b1]), 
       index=['PCC', 'p-value'], 
       name=a1 + '__' +b1 
       )) 

PS를 : 그것은을 다음 질문에 수입품을 포함 시키면 좋을 것입니다. (응답하는 사람들이 Google에 할 필요가 없도록)

+0

감사합니다. 결과 데이터 프레임이 비어 있습니다. – user1017373

+0

이상하게도 이상하게 작동합니다. 팬더의 어떤 버전을 사용하고 있습니까? –

+0

'0.18.1'은 내가 사용하는 버전입니다 – user1017373