我正在处理 csv 文件,该文件包含每个节点的标题和每个节点的相应行,每个数据字段对应于两个节点之间的差异,如下所示:
(在此上下文中 0 表示没有连接,因为它们是相同的节点或它们未连接)
我想改变布局,让它看起来像这样:
以此类推,包括所有节点及其连接
是否有 pythonic 方式来执行此操作?
最佳答案
对于大多数图形操作,如果您使用图形库,您会发现巨大的优势。在这种情况下,您可以轻松地从数据框创建一个图形并将这些距离添加为 edge weights .
然后对于所需的输出,您只需要在这种情况下检索图边的权重,这可以使用 NetworkX 轻松完成。与:
import networkx as nx
G = nx.from_pandas_adjacency(df)
weights = nx.get_edge_attributes(G, 'weight')
print(weights)
{(94, 4): 1589,
(94, 38): 385,
(4, 38): 1280,
(4, 71): 1762,
(4, 90): 1406,
(38, 71): 681,
(38, 90): 202,
(71, 90): 503}
或者,如果您希望将结果作为数据框:
(pd.DataFrame(weights.keys(), columns=['node1', 'node2'])
.assign(Distance=weights.values()))
node1 node2 Distance
0 94 4 1589
1 94 38 385
2 4 38 1280
3 4 71 1762
4 4 90 1406
5 38 71 681
6 38 90 202
7 71 90 503
关于python - 我想将节点和距离矩阵转换成一个表,其中包含 node1、node2 的列以及它们之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67001674/