2015-11-02 39 views
0

刪除特定的值,我有以下相關矩陣:從數據框中

symbol abc xyz ghj 
symbol  
abc  1  0.1 -0.2 
xyz  0.1 1  0.3 
ghj  -0.2 0.3  1 

我需要能夠找到整個數據幀的標準偏差,但有排除完美的相關值,即:標準偏差不得考慮到ABC:ABC,XYZ:XYZ,GHJ:GHJ

我用我能得到標準偏差爲整個數據框:

df.stack().std() 

但是這考慮到了每個不正確的值。標準偏差不應包括項目與其自身相關的行/列組合(即:1)。有沒有辦法刪除abc:abc,xyz:xyz,ghj:ghj。然後計算標準偏差。

也許將其轉換爲字典或什麼?

回答

1

如果使用numpy可以利用np.extractnp.std

In [61]: import numpy as np 

In [62]: a = np.array([[ 1. , 0.1, -0.2], 
         [ 0.1, 1. , 0.3], 
         [-0.2, 0.3, 1. ]]) 

In [63]: a 
Out[63]: 
array([[ 1. , 0.1, -0.2], 
     [ 0.1, 1. , 0.3], 
     [-0.2, 0.3, 1. ]]) 

In [64]: calc_std = np.std(np.extract(a != 1, a)) 

In [65]: calc_std 
Out[65]: 0.20548046676563256 

np.extract(a != 1, a))返回包含其爲不等於爲1

返回的數組看起來像這樣的a每個元素的數組:

In [66]: np.extract(a != 1, a) 
Out[66]: array([ 0.1, -0.2, 0.1, 0.3, -0.2, 0.3]) 

提取後,您可以使用np.std()輕鬆計算標準偏差。