如何解决如何在 Networkx 图中生成组件 ID?
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 ID
和 components
。
所需输出:
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}
解决方法
通过枚举连接的组件列表来创建 Node
、ComponentId
和 Component
的三元组,然后从这些三元组创建一个新的数据框并使用给定的数据框 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
来单独创建 ComponentID
和 Components
列
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 举报,一经查实,本站将立刻删除。