Python 具有累积和的边上的Networkx权重

Python 具有累积和的边上的Networkx权重,python,pandas,networkx,Python,Pandas,Networkx,我正在绘制一个边上有权重的networkx图,我想将权重累加起来。下面的代码仅获取边的最后一个权重,但不获取累积和。有5个节点和3条边。边缘是('A','B'),('A','D')和('C','E'),权重是[1,1,1]。我想要的重量是[2,2,1]而不是[1,1,1]。我需要帮助。Tks 1。创建df import pandas as pd import networkx as nx ints = [1] * 5 a = ['A', 'B', 'C', 'A', 'A'] b = ['D',

我正在绘制一个边上有权重的networkx图,我想将权重累加起来。下面的代码仅获取边的最后一个权重,但不获取累积和。有5个节点和3条边。边缘是
('A','B'),('A','D')
('C','E')
,权重是
[1,1,1]
。我想要的重量是
[2,2,1]
而不是
[1,1,1]
。我需要帮助。Tks

1。创建df

import pandas as pd
import networkx as nx
ints = [1] * 5
a = ['A', 'B', 'C', 'A', 'A']
b = ['D', 'A', 'E', 'D', 'B']
df = pd.DataFrame(ints, columns=['weight'])
df['a'] = a
df['b'] = b
df

    weight  a   b
0   1       A   D
1   1       B   A
2   1       C   E
3   1       A   D
4   1       A   B
2。绘制一张图表

G=nx.from_pandas_dataframe(df, 'a', 'b', ['weight'])
edges = G.edges() 
weights = [G[u][v]['weight'] for u,v in edges]
pos = nx.circular_layout(G)
nx.draw(G, pos, with_labels=True,  width=weights)

因此,我不认为您可以直接使用
nx.从\u pandas\u dataframe
进行累加,至少在快速查看文档之后是这样

但是,在将其传递到
networkx
之前,可以在
pandas
中执行此操作

由于您说过希望权重为
[2,2,1]
,这意味着您认为图形是无向的,因此您必须首先确保:

df["a'"] = pd.DataFrame([df["a"], df["b"]]).min()
df["b'"] = pd.DataFrame([df["a"], df["b"]]).max()
然后,您可以使用一个简单的
groupby

df = df.groupby(by = ["a'", "b'"]).sum().reset_index()
此时,
df
将通过
nx正确转换。从数据帧开始:

G = nx.from_pandas_dataframe(df, "a'", "b'", ['weight'])
[G[u][v]['weight'] for u,v in edges]