Автоматическое добавление весов к ребрам в networkx в зависимости от количества соединений с pandas dataframe - PullRequest
2 голосов
/ 05 июня 2019

Я сейчас пытаюсь создать из кадра данных панд ориентированный граф с помощью networkx, поэтому я могу использовать:

nx.from_pandas_edgelist(df, 'Activity', 'Activity followed', create_using=nx.DiGraph())

, который показывает мне все узлы и ребра из Activity -> Activityfollow.

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

Index Activity Activityfollowed
0     Lunch    Dinner
1     Lunch    Dinner
2     Breakfast Lunch

должны иметь края:

Обед -> Ужин (вес 2)

Завтрак -> Обед (вес 1)

Есть ли способ сделатьэто?

1 Ответ

2 голосов
/ 05 июня 2019

Вы можете попробовать добавить атрибут weight в виде столбца, используя groupby.transform, а затем передать аргумент edge_attr методу from_pandas_edgelist:

df['weight'] = df.groupby(['Activity', 'Activityfollowed'])['Activity'].transform('size')

G = nx.from_pandas_edgelist(df, 'Activity', 'Activityfollowed',
                            create_using=nx.DiGraph(), edge_attr='weight')

Убедитесь, что он работает, используя:

G.edges(data=True)

[out]

OutEdgeDataView([('Lunch', 'Dinner', {'weight': 2}), ('Breakfast', 'Lunch', {'weight': 1})])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...