【问题标题】:Pairwise correlations in dataframe数据框中的成对相关性
【发布时间】:2017-12-18 14:32:22
【问题描述】:

我有一个如下的数据框,

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

【问题讨论】:

    标签: python pandas numpy correlation


    【解决方案1】:

    我不知道它是否是最优雅的解决方案,但您可以使用列表推导来创建包含相关列的列表:

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

    【讨论】:

    • 谢谢,但结果数据框为空
    • 奇怪,它对我有用。你用的是什么版本的熊猫?
    • '0.18.1' 是我现在使用的版本
    • 好的,我有 0.20.3,这可能是错误的根源。你能升级吗?否则,您可能需要更改结果 df 在循环中构建的方式。
    • 是的,但是我有引导版本,我在 0.20.3 上尝试过,现在可以正常工作了。感谢您的解决方案!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2019-09-26
    • 1970-01-01
    • 2019-10-15
    • 2016-10-24
    • 2022-08-11
    相关资源
    最近更新 更多