本文介绍了如何添加自定义函数来计算图形中的边权重?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个数据框,如:
label1 label2 amount
1 1 100
1 2 20
1 3 10
1 4 50
1 5 20
1 6 100
2 1 20
2 2 10
2 3 50
2 4 20
2 5 100
2 6 20
3 1 10
3 2 50
3 3 20
3 4 100
3 5 20
3 6 10
4 1 50
4 2 20
4 3 10
4 4 50
4 5 20
4 6 100
5 1 10
5 2 50
5 3 20
5 4 100
5 5 20
5 6 10
6 1 10
6 2 50
6 3 20
6 4 100
6 5 20
我从networkx创建了一个定向Gragh,label1和label2是节点,数量是边缘的权重,我想让边缘的权重像节点之间的数量之和一样,例如节点1和2之间的权重60,但networkx认为50为权重.
I've created a directed Gragh from networkx that, label1 and label2 are nodes and amount is weight of edges, I want to have the edges weights like the sum of amount between nodes for example between nodes 1 and 2 the weight calculated 60, but networkx consider 50 as weight.
有什么方法可以添加自定义函数来计算重量之和?
is there any way to add custom function that calculate sum of amounts as weight?
推荐答案
从pandas数据框中生成有向图.那么您可以通过边数据来计算路径长度,或者像以下示例一样创建自定义函数:
Make directed graph from pandas dataframe. then you can calculate path length via edges data or make custom function like in this example:
import pandas as pd
import networkx as nx
# calc length of custom path via nodes list
# path have to be connected
def path_length(G, nodes):
w = 0
for ind,nd in enumerate(nodes[1:]):
prev = nodes[ind]
w += G[prev][nd]['amount']
return w
# construct directed graph
df = pd.DataFrame({'label1':[4,5,1,2,3],
'label2':[5,4,2,1,3], 'amount':[100,200,10,50,20]})
G=nx.from_pandas_dataframe(df, 'label1', 'label2', 'amount',nx.DiGraph())
# calc amount of path from edges data
w = 0
for d in G.edges([1,2], data=True):
w += d[2]['amount']
print (w)
# calc path length by custom function
print(path_length(G, [1,2,1]))
输出:
60
60
这篇关于如何添加自定义函数来计算图形中的边权重?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!