为 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