我正在尝试使用 networkx 从 pandas 数据帧创建有向图,到目前为止我可以使用:
nx.from_pandas_edgelist(df, 'Activity', 'Activity followed', create_using=nx.DiGraph())
它显示了 Activity 的所有节点和边 --> Activity followed.
在我的数据框中,有时会出现相同的事件,然后是相同的事件,我想以边缘权重的形式计算这个数字,到目前为止,示例这是我的数据框:
Index Activity Activityfollowed
0 Lunch Dinner
1 Lunch Dinner
2 Breakfast Lunch
应该有边:
午餐 --> 晚餐(权重 2)
早餐-->午餐(权重1)
有什么办法吗?
最佳答案
您可以尝试将 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)
[输出]
OutEdgeDataView([('Lunch', 'Dinner', {'weight': 2}), ('Breakfast', 'Lunch', {'weight': 1})])
关于python - 根据 pandas dataframe 的连接数自动向 networkx 中的边添加权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56455555/