首页 > 解决方案 > 为 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 组。

我不知道该怎么做。

标签: pythonpandasnetworkx

解决方案


您可以很容易地构建一个字典,用 枚举连接的组件集,并从元组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'}}

对于 a 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

推荐阅读