问题描述
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}