【问题标题】:How to generate the component id in the Networkx graph?如何在 Networkx 图中生成组件 id?
【发布时间】:2021-09-15 00:10:11
【问题描述】:

我有一个使用Networkx 包生成的大型图网络。

我在这里添加一个示例

import networkx as nx
import pandas as pd

G = nx.path_graph(4)
nx.add_path(G, [10, 11, 12])

我正在尝试使用 Node、degrees、component id、component 创建一个 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, 11, 12}]

不知道如何在数据中创建Component IDcomponents

需要的输出:

  Node  degree  ComponentID  Components
1   1   2           1         {0, 1, 2, 3}
2   2   2           1         {0, 1, 2, 3}
5   11  2           2         {10, 11, 12}
0   0   1           1         {0, 1, 2, 3}
3   3   1           1         {0, 1, 2, 3}
4   10  1           2         {10, 11, 12}
6   12  1           2         {10, 11, 12}

如何生成组件id并将其添加到节点和度数中?

【问题讨论】:

    标签: python pandas dataframe networkx


    【解决方案1】:

    通过枚举连接的组件列表创建NodeComponentIdComponent 的三元组,然后从这些三元组和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 来单独创建ComponentIDComponents

    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, 1, 2, 3}
    5    11       2            2  {10, 11, 12}
    0     0       1            1  {0, 1, 2, 3}
    3     3       1            1  {0, 1, 2, 3}
    4    10       1            2  {10, 11, 12}
    6    12       1            2  {10, 11, 12}
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    相关资源
    最近更新 更多