首页 > 解决方案 > 矩阵熊猫的邻接表

问题描述

我正在尝试通过一个从列表中构建邻接矩阵的玩具示例,但我已经无法弄清楚了。我正在考虑 .loc() 但我不确定如何正确索引。

{'nodes':['A', 'B', 'C', 'D', 'E'],
 'edges':[('A', 'B'), ('A', 'D'), ('B', 'C'), ('B', 'E'), ('C', 'D'), 
                      ('D', 'E'), ('E', 'A'),('E', 'B'), ('E', 'C')]}

我已经开始构建矩阵:

n = len(graph['nodes'])
adj_matr = pd.DataFrame(0, columns = graph['nodes'], index = graph['edges'])

但现在我不知道如何填写。我认为有一个简单的衬里,也许有一个列表理解?

预期输出:

   A  B  C  D  E
A  0  1  0  1  0
B  0  0  1  0  1
C  0  0  0  1  0
D  0  0  0  0  1
E  1  1  1  0  0

标签: pythonpandasdataframenetworkxadjacency-matrix

解决方案


获得邻接矩阵的一种简单方法是使用NetworkX

d = {'nodes':['A', 'B', 'C', 'D', 'E'],
     'edges':[('A', 'B'), ('A', 'D'), ('B', 'C'), ('B', 'E'), ('C', 'D'), 
                      ('D', 'E'), ('E', 'A'),('E', 'B'), ('E', 'C')]}

从您的邻接矩阵看来,该图是有向的。您可以创建一个有向图,如下所示,并从字典中定义其节点和边:

import networkx as nx
g = nx.DiGraph()
g.add_nodes_from(d['nodes'])
g.add_edges_from(d['edges'])

然后您可以获得邻接矩阵作为数据框nx.to_pandas_adjacency

nx.to_pandas_adjacency(g)

    A    B    C    D    E
A  0.0  1.0  0.0  1.0  0.0
B  0.0  0.0  1.0  0.0  1.0
C  0.0  0.0  0.0  1.0  0.0
D  0.0  0.0  0.0  0.0  1.0
E  1.0  1.0  1.0  0.0  0.0
​

推荐阅读