以相同的方式排序2个对称矩阵

时间:2016-07-19 16:16:31

标签: python pandas matrix dataframe

我有2个对称矩阵,其中一个是相关矩阵,另一个类似于相关矩阵。这些矩阵的例子如下所示:

相关矩阵(c):

    A    B    C    D
A   1   0.5  0.1  0.4
B   0.5   1   0.9  0.3
C   0.1  0.9   1   0.3
D   0.4  0.3  0.3   1

其他矩阵(z):

    A    B    C    D
A   3    2    2    2
B   2    3    3    2
C   2    3    3    2
D   2    2    2    3

我按降序排列相关矩阵,以便我可以使用以下代码查看最顶层的相关值:

c = corrMatrixMin10.abs()
s = c.unstack()
so = s.sort_values(kind="quicksort")
pd.DataFrame(so[so.values!=1].sort_values(ascending=False))

我的问题如下:

当我按降序排列相关矩阵c时,相关矩阵本身会失去其形状。如何以完全相同的顺序使另一个矩阵z

例如:矩阵A中的列Bc的交集为0.5。矩阵A中的列Bz的交集为2。在按降序排列矩阵c后,如何保留此顺序以关联这两个值?

非常感谢任何帮助。 TIA。

生成2个矩阵的代码如下:

c = pd.DataFrame([[1, 0.5,  0.1, 0.4],
                   [0.5,  1,  0.9, 0.3],
                   [ 0.1,  0.9,  1, 0.3],
                   [ 0.4, 0.3, 0.3,  1]],
                  columns=list('ABCD'))

z = pd.DataFrame([[3, 2,  2, 2],
                   [2,  3,  3, 2],
                   [ 2,  3,  3, 2],
                   [ 2, 2, 2,  3]],
                  columns=list('ABCD'))

1 个答案:

答案 0 :(得分:3)

您可以使用Series.reindex

c_series = c.unstack().drop([(x, x) for x in c]).sort_values(ascending=False)
z_series = z.unstack().reindex(c_series.index)