Edgelist из pandas фрейма данных с узлами разных цветов - PullRequest
1 голос
/ 03 августа 2020

У меня есть следующий фрейм данных:

Src  Dst
A    [A,B]
B    [B,A]
C    [C]
D    [D,E,F]
E    [E,D,F]
F    [F,D,E]
...

Я хотел бы создать сеть, в которой Src - узлы, Dst - края и где новый столбец Weight может назначьте другой цвет (зеленый) узлу, который равен A или D, в то время как остальные все такие же (например, синий).

Я пробовал следующее:

Создать новый столбец Вес

nd=["A","D"]
df['Weight'] = np.where(df.Src.isin(nd), 1, 0)

Проблема в том, что я не знаю, как назначить цвет, поэтому я просто попытался присвоить значения 1 для A или D и 0 для всех остальных значений и отдельно для изменить цвета.

Для графика я использовал следующее

G = nx.from_pandas_edgelist(df, 'Src', 'Dst')

Приведенная выше строка кода не соединяется со строками узлов в Dst, и я не могу понять причину. Я нашел кое-что, что может быть полезно при назначении цветов:

   colors=[]
for n in df.Src:
    if n in df.Weight:
        colors.append('g')
    else:
        colors.append('b')

# nodes
nx.draw_networkx_nodes(G,pos, node_color = colors)

, но у меня такая ошибка:

ValueError: аргумент 'c' имеет 79 элементов, которые несовместимо с 'x' и 'y' размером 76.

Изображение ниже будет примерно таким, как я ожидал (A и D узлы зеленые, другие синие и ссылки на основе данных Dst; обратите внимание, что на изображении ниже в настоящее время НЕ воспроизводятся ни цвет, ни края).

введите описание изображения здесь

Не могли бы вы помочь мне дать совет, как это сделать?

1 Ответ

2 голосов
/ 03 августа 2020

Вот способ сделать это:

df["color"] = "blue"
df.loc[df.Src.isin(["A", "D"]), "color"] = "green"

# The following line is needed because, at least in the way my dataset 
# is created, 'Dst' is not a list but rather a string. 
# For example, Dst of 'A' is the string "[A,B]". Here, 
# I'm converting it to the list ["A", "B"]
# If your data doesn't need this, just comment this line out. 
df["Dst"] = df.Dst.apply(lambda x: x[1:-1].split(","))

G = nx.from_pandas_edgelist(df.explode("Dst"), 'Src', 'Dst')
nx.draw(G, node_color = df.color)

Результат:

введите описание изображения здесь

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