首页 > 解决方案 > Python - 如何将矩阵(由熊猫制成)转换为列表?

问题描述

我已经创建了 jaccard 相似度(请参阅这篇文章->如何从 pandas 数据帧计算 jaccard 相似度

            Unnamed    A     B      C    D     
 Unnamed       1      0.05  0.05  0.05  0.05  
    A        0.05      1    0.99  0.99  0.99  
    B        0.05   0.99     1    0.99  0.99  
    C        0.05   0.99    0.99    1   0.99  
    D        0.05   0.99    0.99  0.99   1    

上面显示的矩阵也指的是参考帖子。

我的问题是我想知道如何将此矩阵转换为对或列表?因为我将使用列表或配对形式的数据来创建网络

我希望看到结果为

([unnamed, unnamed], 1)
([unnamed, A], 0.05)
([unnamed, B], 0.05)
([unnamed, C], 0.05)
([unnamed, D], 0.05
([A, unnamed], 0.05)
([A,A], 1)
([A,B], 0.99)
([A,C], 0.99)
([A,D], 0.99)
.
.
.
([D,Unnamed], 0.05)
([D,A], 0.99)
([D,B], 0.99)
([D,C], 0.99)
([D,D], 1)

谢谢你先进

标签: pythonpandasmatrix

解决方案


利用

In [91]: df.stack().to_dict()
Out[91]:
{('Unnamed', 'Unnamed'): 1.0,
 ('Unnamed', 'A'): 0.05,
 ('Unnamed', 'B'): 0.05,
 ('Unnamed', 'C'): 0.05,
 ('Unnamed', 'D'): 0.05,
 ('A', 'Unnamed'): 0.05,
 ('A', 'A'): 1.0,
 ('A', 'B'): 0.99,
 ('A', 'C'): 0.99,
 ('A', 'D'): 0.99,
 ('B', 'Unnamed'): 0.05,
 ('B', 'A'): 0.99,
 ('B', 'B'): 1.0,
 ('B', 'C'): 0.99,
 ('B', 'D'): 0.99,
 ('C', 'Unnamed'): 0.05,
 ('C', 'A'): 0.99,
 ('C', 'B'): 0.99,
 ('C', 'C'): 1.0,
 ('C', 'D'): 0.99,
 ('D', 'Unnamed'): 0.05,
 ('D', 'A'): 0.99,
 ('D', 'B'): 0.99,
 ('D', 'C'): 0.99,
 ('D', 'D'): 1.0}

或者,

In [98]: [(list(i), v) for i, v in df.stack().iteritems()]
Out[98]:
[(['Unnamed', 'Unnamed'], 1.0),
 (['Unnamed', 'A'], 0.05),
 (['Unnamed', 'B'], 0.05),
 (['Unnamed', 'C'], 0.05),
 (['Unnamed', 'D'], 0.05),
 (['A', 'Unnamed'], 0.05),
 (['A', 'A'], 1.0),
 (['A', 'B'], 0.99),
 (['A', 'C'], 0.99),
 (['A', 'D'], 0.99),
 (['B', 'Unnamed'], 0.05),
 (['B', 'A'], 0.99),
 (['B', 'B'], 1.0),
 (['B', 'C'], 0.99),
 (['B', 'D'], 0.99),
 (['C', 'Unnamed'], 0.05),
 (['C', 'A'], 0.99),
 (['C', 'B'], 0.99),
 (['C', 'C'], 1.0),
 (['C', 'D'], 0.99),
 (['D', 'Unnamed'], 0.05),
 (['D', 'A'], 0.99),
 (['D', 'B'], 0.99),
 (['D', 'C'], 0.99),
 (['D', 'D'], 1.0)]

推荐阅读