数据框架中的成对相关性,使列潜水

时间:2017-12-18 14:32:22

标签: python pandas numpy correlation

我有一个数据框如下,

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

我的目标是使用pearsonr进行成对相关,但我想要以a1与b1结尾的列之间的成对相关。最终结果应该是,

                     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']

1 个答案:

答案 0 :(得分: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:如果您在下一个问题中包含您的导入,那就太棒了。 (这样人们回答就不必谷歌了)