如何解决将第二条边的属性添加到现有图中
edges1 = pd.DataFrame({'source':[0,1,2,3,4],'target':[10,11,12,13,14],'weight':[50,50,50]})
G = nx.from_pandas_edgelist(edges1,'source','target','weight')
我加载了 G,然后尝试添加第二条边的属性(成本)和一个节点属性。 但它不断覆盖第一条边的属性(权重)。
edges2 = pd.DataFrame({'source':[0,6,7,8],16,17,18],'cost':[100,100,100]})
nodes = pd.DataFrame({'node':[0,10,'name':['A','B','C','D','E','F']})
nx.from_pandas_edgelist(edges2,'cost')
nx.set_node_attributes(G,pd.Series(nodes.name,index=nodes.node).to_dict(),'name')
我必须加载图 G,因此组合edge1 和edge2 DataFrames 并创建图并不是我所需要的。
我怎样才能得到这个?
[(0,{'weight':50,'cost': 100}),(1,'cost': 100}) ...]
代替这个
[(0,{'cost': 100}),{'cost': 100}) ...]
解决方法
我不清楚您是否要从 edges2
添加新边。如果您可以添加新边,则可以使用 nx.compose
:
H = nx.from_pandas_edgelist(edges2,'source','target','cost')
G_updated = nx.compose(G,H)
如果不想添加新边,可以先检查边是否存在,然后直接设置边属性:
H = nx.from_pandas_edgelist(edges2,'cost')
for edge in H.edges():
if edge in G.edges():
G.edges[edge]['cost'] = H.edges[edge]['cost']
如果性能是一个问题,您还可以考虑使用您的 G
数据直接设置 edges2
的边缘属性,而无需构建第二个图甚至第二个数据框。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。