Networkx:根据数据框中的列值在顶点之间添加边

时间:2019-06-12 03:18:06

标签: python pandas networkx

考虑具有类似于以下内容的数据框:

df = pd.DataFrame({'id_emp' : [13524791000109, 12053850000137, 4707821000113, 4707821000114, 1],
               'name_emp': ['Cristiano', 'Gaúcho', 'Fenômeno','Angelin', 'Souza'],
               'name_dep': ['Ronaldo','Iker', 'Adriano', 'Adriano', 'Bruno'],
               'Team': ['Real','Real', 'Flamengo','Flamengo','Boa']})

绘制一个图形,其中节点由列'id_emp''name_emp'表示。如果两种类型的节点与数据框在同一行,则它们之间存在一条边。如果团队列Team的值相同,我想在两个'name_emp'类型的顶点之间创建一条边。我正在尝试以下方法:

G = nx.Graph()

G.add_nodes_from(df['id_emp'], bipartite = 0)
emp = [v for v in G.nodes if G.nodes[v]['bipartite'] == 0]

G.add_nodes_from(df['name_dep'], bipartite = 1)
dep = [v for v in G.nodes if G.nodes[v]['bipartite'] == 1]

G.add_edges_from(df[['name_dep', 'id_emp']].values)
G.add_edges_from(df[['name_dep', 'Team']].values)

plt.figure(figsize=(5,5))

pos = nx.spring_layout(G, k=0.9)
nx.draw_networkx_nodes(G, pos, nodelist=dep, node_color='#bfbf7f', node_shape="h", node_size=300, label='dep', with_labels = True)
nx.draw_networkx_nodes(G, pos, nodelist=emp, node_color='red', node_size=300, label = 'emp',with_labels = True)
nx.draw_networkx_edges(G, pos, alpha=0.2)

plt.axis('off')
plt.show()

输出:

enter image description here

但是我得到的只是添加一个只有一个终端节点的边缘。那么如何在“团队”列中具有相同值的'name_dep'类型的节点之间添加边?

0 个答案:

没有答案