Networkx weights on edges with cumulative sum
我正在绘制一个在边缘具有权重的networkx图,我想累计权重。下面的代码仅获得边缘的最后权重,但获得累加总和。有5个节点和3个边。边缘为
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) |
因此,至少在快速浏览文档后,我认为您不能直接使用
但是,您可以在将其传递给
由于您说过要使权重为
1 2 | df["a'"] = pd.DataFrame([df["a"], df["b"]]).min() df["b'"] = pd.DataFrame([df["a"], df["b"]]).max() |
然后,您可以使用简单的
进行累加和
1 | df = df.groupby(by = ["a'","b'"]).sum().reset_index() |
这时,
1 2 | G = nx.from_pandas_dataframe(df,"a'","b'", ['weight']) [G[u][v]['weight'] for u,v in edges] |