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']