根据与pandas数据框的连接数自动将权重添加到networkx中的边缘

时间:2019-06-05 06:57:55

标签: python pandas networkx

我现在正在尝试使用networkx从大熊猫数据框中创建一个有向图,到目前为止,我可以使用:

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

向我展示了Activity->跟着Activity的所有节点和边缘。

在我的数据框中,有时会有相同的活动,随后又是相同的活动,我想到目前为止以边缘权重的形式计算此数字,例如,这是我的数据框:

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

应该具有优势:

午餐->晚餐(体重2)

早餐->午餐(体重1)

有什么办法吗?

1 个答案:

答案 0 :(得分:2)

您可以尝试使用groupby.transformweight属性作为一列添加,然后将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)

[出]

OutEdgeDataView([('Lunch', 'Dinner', {'weight': 2}), ('Breakfast', 'Lunch', {'weight': 1})])