1 回答

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊
您使圖表的創(chuàng)建過(guò)于復(fù)雜。您可以使用nx.from_pandas_edgelist更簡(jiǎn)單的方式從數(shù)據(jù)幀創(chuàng)建圖形(包括邊緣屬性),并找到最短路徑長(zhǎng)度:
G = nx.from_pandas_edgelist(df, source='F', target='T', edge_attr=['weight','dummy'],
create_using=nx.DiGraph)
G.edges(data=True)
# EdgeDataView([('a', 'b', {'weight': 1.2, 'dummy': 'q'}),
# ('b', 'c', {'weight': 5.2, 'dummy': 'w'})...
nx.shortest_path_length(G, source='c', target='f', weight='weight')
# 4.0
仔細(xì)觀察您的方法,問(wèn)題在于您如何指定 中的權(quán)重nx.shortest_path_length。"['attributes']['weight']"當(dāng)weight參數(shù)應(yīng)設(shè)置為指定權(quán)重屬性名稱(chēng)的字符串時(shí),您正在使用, 。所以在你的情況下,"weight".
因此你得到的結(jié)果與:
nx.shortest_path_length(G=g, source='c', target='f', weight=None)
# 2
而你應(yīng)該按照上面的方式做:
nx.shortest_path_length(G, source='c', target='f', weight='weight')
# 4.0
添加回答
舉報(bào)