将第二条边的属性添加到现有图中
add a second edge's attribute into a existing graph
我正在尝试在 现有图形 中添加第二条边的属性。
我创建了一个图 G 并将其保存为 pkl 文件。
edges1 = pd.DataFrame({'source':[0,1,2,3,4],
'target':[10,11,12,13,14],
'weight':[50,50,50,50,50]})
G = nx.from_pandas_edgelist(edges1, 'source', 'target', 'weight')
我加载了 G,然后尝试添加第二条边的属性(成本)和节点属性。
但它不断覆盖第一条边的属性(权重)。
edges2 = pd.DataFrame({'source':[0,1,2,6,7,8],
'target':[10,11,12,16,17,18],
'cost':[100,100,100,100,100,100]})
nodes = pd.DataFrame({'node':[0,1,2,3,10,18],
'name':['A','B','C','D','E','F']})
nx.from_pandas_edgelist(edges2, 'source', 'target', 'cost')
nx.set_node_attributes(G, pd.Series(nodes.name, index=nodes.node).to_dict(), 'name')
我必须加载图 G,因此组合 edges1 和 edges2 DataFrames 并创建一个图不是我需要的。
我怎样才能得到这个?
[(0, 10, {'weight':50, 'cost': 100}), (1, 11, {'weight':50, 'cost':
100}) ...]
而不是这个
[(0, 10, {'cost': 100}), (1, 11, {'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, 'source', 'target', 'cost')
for edge in H.edges():
if edge in G.edges():
G.edges[edge]['cost'] = H.edges[edge]['cost']
如果性能有问题,您还可以考虑直接使用 edges2
数据设置 G
的边缘属性,而无需构建第二个图形甚至第二个数据框。
我正在尝试在 现有图形 中添加第二条边的属性。
我创建了一个图 G 并将其保存为 pkl 文件。
edges1 = pd.DataFrame({'source':[0,1,2,3,4],
'target':[10,11,12,13,14],
'weight':[50,50,50,50,50]})
G = nx.from_pandas_edgelist(edges1, 'source', 'target', 'weight')
我加载了 G,然后尝试添加第二条边的属性(成本)和节点属性。 但它不断覆盖第一条边的属性(权重)。
edges2 = pd.DataFrame({'source':[0,1,2,6,7,8],
'target':[10,11,12,16,17,18],
'cost':[100,100,100,100,100,100]})
nodes = pd.DataFrame({'node':[0,1,2,3,10,18],
'name':['A','B','C','D','E','F']})
nx.from_pandas_edgelist(edges2, 'source', 'target', 'cost')
nx.set_node_attributes(G, pd.Series(nodes.name, index=nodes.node).to_dict(), 'name')
我必须加载图 G,因此组合 edges1 和 edges2 DataFrames 并创建一个图不是我需要的。
我怎样才能得到这个?
[(0, 10, {'weight':50, 'cost': 100}), (1, 11, {'weight':50, 'cost': 100}) ...]
而不是这个
[(0, 10, {'cost': 100}), (1, 11, {'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, 'source', 'target', 'cost')
for edge in H.edges():
if edge in G.edges():
G.edges[edge]['cost'] = H.edges[edge]['cost']
如果性能有问题,您还可以考虑直接使用 edges2
数据设置 G
的边缘属性,而无需构建第二个图形甚至第二个数据框。