python - 根据 pandas dataframe 的连接数自动向 networkx 中的边添加权重

标签 python pandas networkx

我正在尝试使用 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/

相关文章:

matplotlib - 如何将 'zoom' 到 osmnx 图中的特定区域

python - 在数组和元组之间转换时的舍入问题

python - SugarCRM 过滤器 PYTHON

python - 将 'apply' 与 Pandas 数据框元素中的数组一起使用

python - 访问 networkx 节点和属性

python - 消除网络的内部环路

python - 如何覆盖 MagicMock 子类上的 __getitem__

python - Pandas :用 boolean 值替换会产生不一致的结果

Pandas 分组模式 |如何处理平等值(value)观

python - Pandas 如何根据索引值改变序列并保留其他序列值