Pandas 如何在所有有起点和终点的城市之间找到最短路径

Pandas 如何在所有有起点和终点的城市之间找到最短路径,pandas,networkx,shortest-path,Pandas,Networkx,Shortest Path,我有一个这样的数据框 From City City A City B City C City D City A 2166 577 175 City B 2166 1806 2092 City C 577 1806 653 City D 175 2092 653 我使用tsp解算器找到了最短路径顺序,但我想

我有一个这样的数据框

 From City      City A  City B City C  City D
 City A                 2166    577     175
 City B         2166            1806    2092
 City C         577     1806            653
 City D         175     2092    653 
我使用tsp解算器找到了最短路径顺序,但我想找到具有起点和终点的最短路径顺序。请帮忙

预期产出:

如果我选择,城市B是我的起点,
它应该返回一个从城市B开始的城市列表,并通过所有具有最短路径的城市进行布线

我不知道我是否正确理解了这个问题,但是如果您希望从所选城市获得具有最短路径的城市的有序列表,您可以这样做:

df = pd.DataFrame({"From city": ['A', 'B', 'C', 'D'], 'A':[np.NaN,2166,577,175], 'B':[2166,np.NaN,1806,2092], 'C':[577,1806,np.NaN,653], 'D':[175,2092,653,np.NaN]})
df.set_index('From city', inplace=True)
print df
                A       B       C       D
From city                                
A             NaN  2166.0   577.0   175.0
B          2166.0     NaN  1806.0  2092.0
C           577.0  1806.0     NaN   653.0
D           175.0  2092.0   653.0     NaN

dic = df.to_dict(orient='records')
city=dic[3]
from math import isnan
city = {k: city[k] for k in city if not isnan(city[k])}
city_order = sorted(city.items(), key=lambda x:x[1])
city_list = [i[0] for i in city_order]
说明:

从df制作字典:

dic = df.to_dict(orient='records')
为城市“D”选择您所在的城市->3

city=dic[3]
删除NaN元素

from math import isnan
city = {k: city[k] for k in city if not isnan(city[k])}
命令

仅以城市为例:

city_list = [i[0] for i in city_order]
print city_list
输出:

['A', 'C', 'B']

你能多加些细节吗?输出应该是怎样的?我编辑了A的问题应该是:“[City D,City C,City B]”?Joe,谢谢你的解决方案,实际上我发布了一个问题,但我无法达到起始和结束位置,这就是我发布此解决方案的原因。请检查我的第一个问题,以便更好地理解。你看到我前面的问题了吗
['A', 'C', 'B']