python-Networkx:计算并存储图中到熊猫数据框的最短路径
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-Networkx:计算并存储图中到熊猫数据框的最短路径,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2864字,纯文字阅读大概需要5分钟。
内容图文
![python-Networkx:计算并存储图中到熊猫数据框的最短路径](/upload/InfoBanner/zyjiaocheng/686/15c71052a957413a8622c4f9ff2c996b.jpg)
我有一个熊猫数据框,如下所示.该框架中还有许多与任务无关紧要的列. ID列显示句子ID,而e1和e2列包含句子的实体(=单词)及其在r列中的关系
id e1 e2 r
10 a-5 b-17 A
10 b-17 a-5 N
17 c-1 a-23 N
17 a-23 c-1 N
17 d-30 g-2 N
17 g-20 d-30 B
我还为每个句子创建了一个图表.该图是从看起来像这样的边列表中创建的
[(‘wordB-5′,’wordA-1’),(‘wordC-8′,’wordA-1’),…]
所有这些边都在一个列表中.该列表中的每个元素都包含每个句子的所有边.含义list [0]具有句子0的边缘,依此类推.
现在,我要执行以下操作:
graph = nx.Graph(graph_edges[i])
shortest_path = nx.shortest_path(graph, source="e1",
target="e2")
result_length = len(shortest_path)
result_path = shortest_path
对于数据框中的每一行,我想计算最短的路径(从e1中的实体到e2中的实体,并将所有结果保存在DataFrame中的新列中,但是我不知道该怎么做.
我尝试使用这些构造
e1 = DF["e1"].tolist()
e2 = DF["e2"].tolist()
for id in Df["sentenceID"]:
graph = nx.Graph(graph_edges[id])
shortest_path = nx.shortest_path(graph,source=e1, target=e2)
result_length = len(shortest_path)
result_path = shortest_path
创建数据,但表示目标不在图中.
new df=
id e1 e2 r length path
10 a-5 b-17 A 4 ..
10 b-17 a-5 N 4 ..
17 c-1 a-23 N 3 ..
17 a-23 c-1 N 3 ..
17 d-30 g-2 N 7 ..
17 g-20 d-30 B 7 ..
解决方法:
这是通过三种不同的步骤来做您想做的事情的一种方法,因此很容易遵循.
>步骤1:从边缘列表中构建networkx图形对象.
>步骤2:创建一个包含2列的数据框(对于该DF中的每一行,我们希望从e1列到e2中的实体的最短距离和路径)
>步骤3:逐行查找DF,计算最短路径和长度.将它们作为新列存储在DF中.
步骤1:建立图形并逐一添加边线
import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt
elist = [[('a-5', 'b-17'), ('b-17', 'c-1')], #sentence 1
[('c-1', 'a-23'), ('a-23', 'c-1')], #sentence 2
[('b-17', 'g-2'), ('g-20', 'c-1')]] #sentence 3
graph = nx.Graph()
for sentence_edges in elist:
for fromnode, tonode in sentence_edges:
graph.add_edge(fromnode, tonode)
nx.draw(graph, with_labels=True, node_color='lightblue')
步骤2:建立所需距离的资料框
#Create a data frame to store distances from the element in column e1 to e2
DF = pd.DataFrame({"e1":['c-1', 'a-23', 'c-1', 'g-2'],
"e2":['b-17', 'a-5', 'g-20', 'g-20']})
DF
步骤3:计算最短路径和长度,并存储在数据框中
这是最后一步.计算最短路径并存储它们.
pathlist, len_list = [], [] #placeholders
for row in DF.itertuples():
so, tar = row[1], row[2]
path = nx.shortest_path(graph, source=so, target=tar)
length=nx.shortest_path_length(graph,source=so, target=tar)
pathlist.append(path)
len_list.append(length)
#Add these lists as new columns in the DF
DF['length'] = len_list
DF['path'] = pathlist
产生所需的结果数据帧:
希望这对您有所帮助.
内容总结
以上是互联网集市为您收集整理的python-Networkx:计算并存储图中到熊猫数据框的最短路径全部内容,希望文章能够帮你解决python-Networkx:计算并存储图中到熊猫数据框的最短路径所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。