我现在正在尝试使用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)
有什么办法吗?
答案 0 :(得分:2)
您可以尝试使用groupby.transform
将weight
属性作为一列添加,然后将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})])