根据数据框中的特定字符串列创建网络

Create a Network based on a specific string column inside dataframe

我有一个如下图所示的数据框:

但是我在创建这个网络的时候遇到了一些麻烦。 我使用了这段代码:

G = nx.complete_graph(df.Members)
list(G.edges())

但是我出错了。 我的问题是如何根据此类数据创建此网络。我应该提一下,每个组都是一个完整的图,我想 assemble 这些组合二为一。此外,我有一些白色 space 导致一些重复的节点。

用你的格式绘制它本身至少是另一个 SO 问题,所以我坚持按照你展示的方式粗略地解析数据,生成图表,并做一个粗略的绘图。这是下面代码块的结果:

从情节格式的角度来看,我所做的只是

  1. 包括节点标签
  2. 固定节点B、C、F、J的位置
  3. fiddle 加上 nx.spring_layout() 参数,让情节更容易辨认。
import pandas as pd
import networkx as nx


d = {'Group Name': {1: 'Alpha', 2: 'Beta', 3: 'Gamma', 4: 'Omega'}, 'Members': {1: 'A, B, C', 2: 'C, D, E, F', 3: 'F, G, H, I, J', 4: 'J, K, L,M,N, O'}, 'Weight': {1: 'W1', 2: 'W2', 3: 'W3', 4: 'W4'}}
df = pd.DataFrame.from_dict(d)

subgraphs = []
for record in df.to_records():
    nodes = [node.strip() for node in record[2].split(",")]
    subgraph = nx.complete_graph(nodes)
    nx.set_edge_attributes(subgraph, record[3], name='Weight')
    subgraphs.append(subgraph)

G = nx.compose_all(subgraphs)

node_types = {'A': 1, 'B': 1, 'C':2, 'D': 1, 'E': 2, 'F': 1, 'G': 1, 'H': 1, 'I': 2, 'J': 2, 'K': 1, 'L': 1, 'M': 2, 'N': 1, 'O': 1}
nx.set_node_attributes(G, node_types, name='Type')

pos_fixed = {'B': (1, 0),
             'C': (2, 0),
             'F': (3, 0),
             'J': (4, 0),
             'K': (5, 0)}

pos = nx.spring_layout(G, k=1.25, pos=pos_fixed, fixed=pos_fixed.keys(), seed=42)

nx.draw(G, pos, with_labels=True)