如何从 NetworkX

问题描述

我想做的是在 NetworkX 中构建一个图,其中每个节点都是一个火车站。构建我所做的节点:

G = nx.Graph()
G.add_nodes_from(trains['Stopping place'].unique())

它(至少看起来像)它正在工作。
现在,因为对于每一行我都有按顺序停止,我像这样构建我的路径:

stops_by_line = ((belgium_trains.sort_values(['Train number','Actual arrival datetime']).groupby('Train number'))['Stopping place'].apply(list).to_dict())
paths = ([tuple(val) for val in stops_by_line.values()])

变量如下所示:

[('HERGENRATH','CHENEE','ANGLEUR','LIEGE-GUILLEMINS','ANS','LEUVEN','HERENT','VELTEM','ERPS-KWERPS','KORTENBERG','NOSSEGEM','ZAVENTEM','DIEGEM','HAREN-ZUID','SCHAARBEEK','BRUSSEL-NOORD','BRUSSEL-CONGRES','BRUSSEL-CENTRAAL','BRUSSEL-KAPELLEKERK','BRUSSEL-ZUID'),(...other ordered tuples of stops),...)]

现在我的问题是,由于所有这些元素也是节点名称,我如何依次使用这些元组构建边(例如,在 BRUSSEL-NOORD 和 BRUSSEL-CONGRES 之间添加一条边,然后从 BRUSSEL-CONGRES 到 BRUSSEL -CENTRAAL 等等)?

解决方法

您可以简单地在循环中使用 add_path 方法:

for path in paths:
    nx.add_path(G,path)

Sidemark,如果你添加了一条边(比如上面的例子),那么 networkx 也会直接将相应的节点添加到图中。所以可能(如果所有站点都被某列火车覆盖)您之前不需要手动添加节点。