1

我有一个如下的数据框,我使用有向图。

在这种情况下,您可以发现第一行和最后一行中的“1”和“3”之间存在相同的交互。

我发现该nx.degree()功能仅适用于相同节点交互的最后一个事件。

我想degree()考虑 networkx 语法中相同节点之间的所有事件。

  sender receiver  amt
0      1        3   50
3      2        1    1
4      1        3  100
test = pd.DataFrame({'sender' : ['1','2','1'], 
                   'receiver' : ['3','1','3'], 
                   'amt' : [50,1,100]})

H = nx.from_pandas_edgelist(test, source = 'sender', target = 'receiver',
                            create_using=nx.DiGraph(), edge_attr = 'amt')

H.out_degree(weight = 'amt')
# this is a result :  {'1': 100, '3': 0, '2': 1}
# However I want to get this result : {'1': 150, '3': 0, '2': 1}
4

1 回答 1

1

您正在获得该学位,因为仅考虑了最后一条边。在有向图中,您不能有多个边连接到同一端。考虑到您期望的输出,您可以做的是事先groupby和这些权重:sum

G = nx.from_pandas_edgelist(test.groupby(['sender','receiver'], as_index=False).amt.sum(), 
                            source = 'sender', 
                            target = 'receiver',
                            create_using=nx.DiGraph(), 
                            edge_attr = 'amt')

G.out_degree(weight = 'amt')
# OutDegreeView({1: 150, 3: 0, 2: 1})
于 2020-07-26T06:15:56.163 回答