【问题标题】:From a databaset, create an edgelist and node's attributes list从数据库中,创建边列表和节点属性列表
【发布时间】:2022-01-19 00:15:01
【问题描述】:

我有一个包含以下列和观察的数据集:

   Source   Target  Label_Source    Label_Target
    E   N   0.0 0.0
    A   B   1.0 1.0
    A   C   1.0 0.0
    A   D   1.0 0.0
    A   N   1.0 0.0
    S   G   0.0 0.0
    S   L   0.0 1.0
    S   C   0.0 0.0

谁构建了数据集并没有拆分为边缘列表和节点属性,所以现在我有兴趣创建这两个单独的数据集。 我的想法是选择网络中的唯一节点并在节点及其相应的标签值之间创建一个映射,请注意 Label_Source 分配给源节点,而 Label_Target 分配给目标节点。网络中两者没有重叠(至少,不应该有)。 我的预期输出是

  1. edgelist(只需删除标签列):

    源目标
    中文
    甲乙
    一个C
    A D
    一个N
    SG
    小号
    小号

  2. 具有属性的节点列表:

     Node    Label
     E          0
     N          0
     A          1
     B          1
     C          0
     D          0
     S          0
     G          0
     L          1
    

你能告诉我如何让节点列表创建这个映射吗?我想一个选项是从 Source 和 Target 中选择不同的元素,然后为每个元素查看 Label_source 或 target 列中的标签。

【问题讨论】:

    标签: pandas networkx


    【解决方案1】:

    让我们尝试拆分然后groupbymax

    out1 = df.filter(like='Source')
    out2 = df.filter(like='Target')
    out1.columns = ['Node','Label']
    out2.columns = ['Node','Label']
    out = pd.concat([out1,out2]).groupby('Node').max().reset_index()
    
      Node  Label
    0    A    1.0
    1    B    1.0
    2    C    0.0
    3    D    0.0
    4    E    0.0
    5    G    0.0
    6    L    1.0
    7    N    0.0
    8    S    0.0
    

    【讨论】:

      【解决方案2】:

      试试:

      edgelist = df[['Source', 'Target']]
      nodelist = pd.concat([pd.DataFrame(df.filter(like='Source').to_numpy()),
                            pd.DataFrame(df.filter(like='Target').to_numpy())]) \
                   .rename(columns={0: 'Node', 1: 'Label'}).fillna(0) \
                   .astype({'Label': int}).drop_duplicates().reset_index(drop=True)
      

      输出:

      >>> edgelist
        Source Target
      0      E      N
      1      A      B
      2      A      C
      3      A      D
      4      A      N
      5      S      G
      6      S      L
      7      S      C
      
      >>> nodelist
        Node  Label
      0    E      0
      1    A      1
      2    S      0
      3    N      0
      4    B      1
      5    C      0
      6    D      0
      7    G      0
      8    L      1
      

      【讨论】:

      • 我更新了答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 2017-12-22
      • 2020-07-20
      • 1970-01-01
      相关资源
      最近更新 更多