关于python:Networkx权重具有累加总和

Networkx weights on edges with cumulative sum

我正在绘制一个在边缘具有权重的networkx图,我想累计权重。下面的代码仅获得边缘的最后权重,但获得累加总和。有5个节点和3个边。边缘为('A', 'B'), ('A', 'D')('C', 'E'),权重为[1, 1, 1]。我想要的重量是[2, 2, 1]而不是[1, 1, 1]。需要帮忙。 Tks。

1。创建一个df

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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。绘制图形。

1
2
3
4
5
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)

enter

1
2
df["a'"] = pd.DataFrame([df["a"], df["b"]]).min()
df["b'"] = pd.DataFrame([df["a"], df["b"]]).max()

然后,您可以使用简单的groupby

进行累加和

1
df = df.groupby(by = ["a'","b'"]).sum().reset_index()

这时,df将由nx.from_pandas_dataframe正确转换:

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