微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Networkx 图中生成组件 ID?

如何解决如何在 Networkx 图中生成组件 ID?

我有一个使用 Networkx生成的大型图网络。

enter image description here

在这里添加一个样本

import networkx as nx
import pandas as pd

G = nx.path_graph(4)
nx.add_path(G,[10,11,12])

我正在尝试使用节点、度数、组件 ID、组件创建 dataframe

使用创建的度数

degrees = list(nx.degree(G))

data = pd.DataFrame([list(d) for d in degrees],columns=['Node','degree']).sort_values('degree',ascending=False)

使用

提取组件
Gcc = sorted(nx.connected_components(G),key=len,reverse=True)

Gcc
[{0,1,2,3},{10,12}]

并且不确定如何在数据中创建 Component IDcomponents

所需输出

  Node  degree  ComponentID  Components
1   1   2           1         {0,3}
2   2   2           1         {0,3}
5   11  2           2         {10,12}
0   0   1           1         {0,3}
3   3   1           1         {0,3}
4   10  1           2         {10,12}
6   12  1           2         {10,12}

如何生成组件 id 并将它们添加到节点和度数中?

解决方法

通过枚举连接的组件列表来创建 NodeComponentIdComponent 的三元组,然后从这些三元组创建一个新的数据框并使用给定的数据框 merge Node

df = pd.DataFrame([(n,i,c) for i,c in enumerate(Gcc,1) for n in c],columns=['Node','ComponentID','Components'])

data = data.merge(df,on='Node')

或者,您可以使用 map 而不是 merge 来单独创建 ComponentIDComponents

d = dict(enumerate(Gcc,1))
data['ComponentID'] = data['Node'].map({n:i for i,c in d.items() for n in c})
data['Components']  = data['ComponentID'].map(d)

print(data)

   Node  degree  ComponentID    Components
1     1       2            1  {0,1,2,3}
2     2       2            1  {0,3}
5    11       2            2  {10,11,12}
0     0       1            1  {0,3}
3     3       1            1  {0,3}
4    10       1            2  {10,12}
6    12       1            2  {10,12}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。