Я пытаюсь создать сеть через фрейм данных, как показано ниже:
import pandas as pd
import networkx as nx
df1 = pd.DataFrame({'id_emp' : [1,2,3,4,5],
'roi': ['positive', 'negative', 'positive', 'negative', 'negative'],
'description': ['middle', 'low', 'middle', 'high', 'low']})
df1 = df1.set_index('id_emp')
В сети, которую я пытаюсь разработать, узлы представляют значения столбца id_emp. И между двумя узлами есть ребра, если значения столбцов roi
AND description
совпадают. Вот код, который я использую для разработки:
G = nx.Graph()
G.add_nodes_from([a for a in df1.index])
for cr in set(df1['roi']):
indices = df1[df1['roi']==cr].index
G.add_edges_from(it.product(indices, indices))
for d in set(df1['description']):
indices = df1[df1['description']==d].index
G.add_edges_from(it.product(indices,indices))
pos = nx.kamada_kawai_layout(G)
plt.figure(figsize=(3,3))
nx.draw(G,pos,node_size = 100, width = 0.5,with_labels=True)
plt.show()
Выход:
Проблема: края создаются для узлов как равные значения в столбцах description
ИЛИ roi
. В данном примере узел 4 не должен иметь соединения, поскольку он имеет другое значение в столбце описания.
Что я должен сделать, чтобы проанализировать два условия вместе, чтобы иметь грань между двумя узлами?