pandas:获取相关性高的列组合

时间:2014-10-20 10:44:07

标签: python numpy pandas

我有一个包含6列的数据集,我让pandas计算相关矩阵,结果如下:

               age  earnings    height     hours  siblings    weight
age       1.000000  0.026032  0.040002  0.024118  0.155894  0.048655
earnings  0.026032  1.000000  0.276373  0.224283  0.126651  0.092299
height    0.040002  0.276373  1.000000  0.235616  0.077551  0.572538
hours     0.024118  0.224283  0.235616  1.000000  0.067797  0.143160
siblings  0.155894  0.126651  0.077551  0.067797  1.000000  0.018367
weight    0.048655  0.092299  0.572538  0.143160  0.018367  1.000000

如何获得相关性的列组合,例如,高于0.5,但列不相等?所以在这种情况下,输出必须是:

[('height', 'weight')]

我尝试使用for循环,但我认为这不是正确/最有效的方式:

correlated = []
for column1 in columns:
    for column2 in columns:
        if column1 != column2:
            correlation = df[column1].corr(df[column2])
            if correlation > 0.5 and (column2, column1) not in correlated:
                correlated.append((column1, column2))

其中df是我的原始数据帧。这将输出所需的结果:

[(u'height', u'weight')]

1 个答案:

答案 0 :(得分:10)

如何使用numpy,并假设您已在df中拥有相关矩阵:

import numpy as np

indices = np.where(df > 0.5)
indices = [(df.index[x], df.columns[y]) for x, y in zip(*indices)
                                        if x != y and x < y]

这将导致indices包含:

[('height', 'weight')]