Networkx: несколько условий для ребер - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь создать сеть через фрейм данных, как показано ниже:

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()

Выход:

enter image description here

Проблема: края создаются для узлов как равные значения в столбцах description ИЛИ roi. В данном примере узел 4 не должен иметь соединения, поскольку он имеет другое значение в столбце описания.

Что я должен сделать, чтобы проанализировать два условия вместе, чтобы иметь грань между двумя узлами?

1 Ответ

1 голос
/ 17 июня 2019

Я не уверен, почему вы используете инструмент теории графов в таком случае. NetworkX было бы интересно, если бы вы хотели найти, например, подключенные компоненты (т.е. связанные узлы).

Однако, если два заданных ребра должны соединять одни и те же узлы, чтобы их можно было рассматривать как часть одного и того же компонента, это по сути то же самое, что и получение списка повторяющихся строк в кадре данных, что может быть достигнуто с помощью:

df1.roi.str.cat(df1.description, sep='-').reset_index().groupby('roi').id_emp.apply(list)

roi
negative-high         [4]
negative-low       [2, 5]
positive-middle    [1, 3]
Name: id_emp, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...