Создание графа с сетьюx в соответствии со значением столбца pandas dataframe - PullRequest
1 голос
/ 16 мая 2019

У меня есть следующий DataFrame:

import pandas as pd
df = pd.DataFrame({'id_emp': [1,2,3,4,1], 
               'name_emp': ['x','y','z','w','x'], 
               'donnated_value':[1100,11000,500,300,1000],
               'refound_value':[22000,22000,50000,450,90]
            })
df['return_percentagem'] = 100 * 
df['refound_value']/df['donnated_value']
df['classification_roi'] = ''

def comunidade(i):

    if i < 50:
        return 'Bad Investment'
    elif i >=50 and i < 100:
        return 'Median Investment'
    elif i >= 100:
        return 'Good Investment'

df['classification_roi'] = df['return_percentagem'].map(comunidade)
df

Узлы будут 'id_emp'.Будет связь между двумя узлами, если у них одинаковый id_emp, но с разными классификациями в столбцеification_roi или если они имеют одинаковый ранг в столбцеification_roi.Короче говоря, узлы имеют соединение, если они имеют одинаковый идентификатор или если они находятся в одной и той же классификации в столбце'ification_roi '

У меня нет большой практики с networkx, и то, что я пытаюсь, далекоот идеала:

import networkx as nx
G = nx.from_pandas_edgelist(df, 'id_emp', 'return_percentagem')
nx.draw(G, with_labels=True)

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 17 мая 2019

Здесь я не использую from_pandas_edgelist. Вместо этого перечислите понимания и циклы:

import matplotlib.pyplot as plt
import networkx as nx
import itertools

G = nx.Graph()

# use index to name nodes, rather than id_emp, otherwise
# multiple nodes would end up having the same name
G.add_nodes_from([a for a in df.index])

#create edges:
#same employee edges
for ie in set(df['id_emp']):
    indices = df[df['id_emp']==ie].index
    G.add_edges_from(itertools.product(indices,indices))

# same classification edges
for cr in set(df['classification_roi']):
    indices = df[df['classification_roi']==cr].index
    G.add_edges_from(itertools.product(indices,indices))

nx.draw(G)
plt.show()

enter image description here

Дополнительно: окраска, чтобы различать узлы.

plt.subplot(121)
plt.title('coloured by id_emp')
nx.draw(G, node_color=df['id_emp'], cmap='viridis')

plt.subplot(122)

color_mapping = { 
    'Bad Investment': 0,
    'Median Investment': 1,
    'Good Investment':2}

plt.title('coloured by classification_roi')
nx.draw(G, node_color=df['classification_roi'].replace(color_mapping), cmap='RdYlBu')

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...