从数据框中删除特定值

时间:2015-11-02 06:28:43

标签: python pandas

我有以下相关矩阵:

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 个答案:

答案 0 :(得分: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))会返回一个数组,其中包含a的每个元素不等于为1。

返回的数组如下所示:

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

在此提取后,您可以使用np.std()轻松计算标准偏差。