如何在数据帧中执行涉及行和列的算术运算?

时间:2015-12-01 13:11:05

标签: python numpy pandas dataframe

假设我有一个矩阵(df):

    c1     c2     c3
c1  21.7   23.4   17.3
c2  23.4   25.8   17.0
c3  17.4   17.0   23.1

我想用这个公式规范化这个矩阵:

enter image description here

生成这个新的规范化矩阵:

    c1     c2     c3
c1  1.0    0.97  0.63
c2  0.97   1.0   0.53
c3  0.63   0.53  1.0

where C'(1,2) = 23.4/(21.7+25.8-23.4)
              = 0.97

我尝试过使用df.corrcoef,但结果并不是我所期望的。

1 个答案:

答案 0 :(得分:2)

您可以在数组的broadcasting of numpy arrays上使用diagonal

>>> arr = df.values
>>> arr
array([[ 21.7,  23.4,  17.3],
       [ 23.4,  25.8,  17. ],
       [ 17.4,  17. ,  23.1]])
>>> arr / (np.diag(arr) + np.diag(arr)[:,np.newaxis] - arr)
array([[ 1.    ,  0.971 ,  0.6291],
       [ 0.971 ,  1.    ,  0.5329],
       [ 0.635 ,  0.5329,  1.    ]])
对于每对坐标np.diag(arr) + np.diag(arr)[:,np.newaxis]

c(u,u) + c(v,v)相当于等式中的(u, v)

>>> np.diag(arr) + np.diag(arr)[:,np.newaxis]
array([[ 43.4,  47.5,  44.8],
       [ 47.5,  51.6,  48.9],
       [ 44.8,  48.9,  46.2]])