2016-02-15 9 views
6

私はパンダでさまざまな列に対して最高の相関関係を見つけようとしています。私はパンダ:相関行列から自己相関を落とす方法

df.sort() 
df.stack() 
df[-5:] 

問題とその後に最高の相関を得ることができます知っている

df.corr() 

との相関行列を得ることができます知っているこれらの相関は、列自体に列の値が含まれていること(1) 。自己との相関を含むこれらの列を削除するにはどうすればよいですか?私はすべての1つの値を削除することでそれらを削除することができますが、私は実際の1つの相関もあるかもしれないので、そうしたくありません。

答えて

8

あなたは

corrs = df.corr() 

その後、問題は対角要素、IIUCである持っていると言います。あなたは簡単にいくつかの負の値にそれらを設定することができ、言う-2

np.fill_diagonal(corrs.values, -2) 

例で(必ずしもすべての相関よりも低くなる)ため@Fabianロストに

(多くのおかげでデータフレームのための改善& @jezrael)

import numpy as np 
df=pd.DataFrame({ 
    'one':[0.1, .32, .2, 0.4, 0.8], 
    'two':[.23, .18, .56, .61, .12], 
    'three':[.9, .3, .6, .5, .3], 
    'four':[.34, .75, .91, .19, .21], 
    'zive': [0.1, .32, .2, 0.4, 0.8], 
    'six':[.9, .3, .6, .5, .3], 
    'drive':[.9, .3, .6, .5, .3]}) 
corrs = df.corr() 
np.fill_diagonal(corrs.values, -2) 
>>> corrs 
    drive four one six three two zive 
drive -2.000000 -0.039607 -0.747365 1.000000 1.000000 0.238102 -0.747365 
four -0.039607 -2.000000 -0.489177 -0.039607 -0.039607 0.159583 -0.489177 
one -0.747365 -0.489177 -2.000000 -0.747365 -0.747365 -0.351531 1.000000 
six 1.000000 -0.039607 -0.747365 -2.000000 1.000000 0.238102 -0.747365 
three 1.000000 -0.039607 -0.747365 1.000000 -2.000000 0.238102 -0.747365 
two 0.238102 0.159583 -0.351531 0.238102 0.238102 -2.000000 -0.351531 
zive -0.747365 -0.489177 1.000000 -0.747365 -0.747365 -0.351531 -2.000000 
+0

相関値に負の値を設定することもできます。したがって、-1より小さい値に設定する方が良いでしょう。 –

+1

@FabianRostこれは優れた点です。私は更新します。ありがとう! –

+1

サンプル 'df = pd.DataFrame({'one':[0.1、.32、.2、0.4、0.8]、 'two':[。23、.18、.56、.61、。 12]、 'three':[.9、.3、.6、.5、.3]、 'four':[.34、.75、.91、.19、.21] 0.1、.32、.2、0.4、0.8]、 'six':[.9、.3、.6、.5、.3]、 'drive':[.9、.3、.6、.5 、.3]}) ' – jezrael

1

私は最近、あなたが比較することができ、私の質問にも、クリーンな答えを見つけました値ごとに複数のインデックスレベル。

これは私が使い終わったものです。

corr = df.corr().stack() 
corr = corr[corr.index.get_level_values(0) != corr.index.get_level_values(1)]