python - 我想将节点和距离矩阵转换成一个表,其中包含 node1、node2 的列以及它们之间的距离

标签 python pandas numpy networkx

我正在处理 csv 文件,该文件包含每个节点的标题和每个节点的相应行,每个数据字段对应于两个节点之间的差异,如下所示:

<表类="s-表"> <头> 空白 4 38 71 90 94 ... 8545 <正文> 4 0 1280 1762 1406 1589 ... 1017 38 1280 0 681 202 385 ... 1433 71 1762 681 0 503 0 ... 0 90 1406 202 503 0 0 ... 1559 94 1589 385 0 0 0 ... 1742 .. .. ... ... ... ... 0 ... 8545 1017 1433 0 1559 1742 ... 0

(在此上下文中 0 表示没有连接,因为它们是相同的节点或它们未连接)

我想改变布局,让它看起来像这样:

<表类="s-表"> <头> 节点1 节点2 距离 <正文> 4 4 0 4 38 1280 4 71 1762

以此类推,包括所有节点及其连接

是否有 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/

相关文章:

python - np.logic_or 与reduce 返回不同的结果

python - 如何绘制事件到达时间间隔的概率密度函数(PDF)?

python - 为什么 tensorflow 模型总是预测同一类?

组成 itemgetter 和 attrgetter 的 pythonic 方式?

python - Windows 注册表值以长整数形式返回

python - 使用 python 绑定(bind) clang 来检查 C++ 类型是否是规范方式的指针、引用等?

python - 我如何按值分组?

python - Pandas 从具有值的列中选择并获取列名称

python - 如何将 numpy 数组中的值组织到包含特定范围值的容器中?

python - 使用两个文件导入并且都需要导入