为 Networkx 中的连接组件列表分配编号
Assigning number to list of connected components in Networkx
我已经使用 networkx 创建了一个图表:
G = nx.Graph()
G.add_edges_from(edges)
list(nx.connected_components(G))
输出如下所示:
{'John Doe' , 'James Doe'},
{'Jack Fisher', 'Adam Scott', 'Jane Matters'}
我想用数字将所有连接的组件组合在一起。所以 John Doe 和 James Doe 属于第 1 组,然后下一个列表属于第 2 组。
我不知道该怎么做。
您可以很容易地构建一个字典,用 enumerate
枚举连接的组件集,并从元组构建一个 dict
:
s = {'John Doe' , 'James Doe'}, {'Jack Fisher', 'Adam Scott', 'Jane Matters'}
dict(enumerate(s))
# {0: {'James Doe', 'John Doe'},
# 1: {'Adam Scott', 'Jack Fisher', 'Jane Matters'}}
对于 pd.DataFrame
,您可以使用字典理解如下:
d = {name:k for k,comp in enumerate(s) for name in comp}
(pd.DataFrame.from_dict(d, orient='index', columns=['component'])
.rename_axis('name')
.reset_index())
name component
0 James Doe 0
1 John Doe 0
2 Jane Matters 1
3 Adam Scott 1
4 Jack Fisher 1
我已经使用 networkx 创建了一个图表:
G = nx.Graph()
G.add_edges_from(edges)
list(nx.connected_components(G))
输出如下所示:
{'John Doe' , 'James Doe'},
{'Jack Fisher', 'Adam Scott', 'Jane Matters'}
我想用数字将所有连接的组件组合在一起。所以 John Doe 和 James Doe 属于第 1 组,然后下一个列表属于第 2 组。
我不知道该怎么做。
您可以很容易地构建一个字典,用 enumerate
枚举连接的组件集,并从元组构建一个 dict
:
s = {'John Doe' , 'James Doe'}, {'Jack Fisher', 'Adam Scott', 'Jane Matters'}
dict(enumerate(s))
# {0: {'James Doe', 'John Doe'},
# 1: {'Adam Scott', 'Jack Fisher', 'Jane Matters'}}
对于 pd.DataFrame
,您可以使用字典理解如下:
d = {name:k for k,comp in enumerate(s) for name in comp}
(pd.DataFrame.from_dict(d, orient='index', columns=['component'])
.rename_axis('name')
.reset_index())
name component
0 James Doe 0
1 John Doe 0
2 Jane Matters 1
3 Adam Scott 1
4 Jack Fisher 1