gpt4 book ai didi

python - Networkx 边上的权重具有累积和

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:55 30 4
gpt4 key购买 nike

我正在绘制一个网络x图,其边上有权重,我想将权重累加起来。下面的代码仅获取边的最后权重,但获取累积和。有 5 个节点和 3 条边。边是 ('A', 'B')、('A', 'D')('C', 'E'),并且权重为[1, 1, 1]。我想要的权重是 [2, 2, 1] 而不是 [1, 1, 1]。需要帮忙。谢谢。

<强>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)

enter image description here

最佳答案

因此,我认为您不能直接使用 nx.from_pandas_dataframe 进行累积和,至少在快速查看文档之后是这样。

但是,您可以在将 pandas 传递给 networkx 之前执行此操作。

既然您说您希望权重为[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.from_pandas_dataframe正确转换:

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

关于python - Networkx 边上的权重具有累积和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41498576/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com