微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将第二条边的属性添加到现有图中

如何解决将第二条边的属性添加到现有图中

我正在尝试在现有图形添加第二条边的属性

我创建了一个图形 G 并将其保存为 pkl 文件

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 举报,一经查实,本站将立刻删除。