【问题标题】:pandas - project bipartite network from dataframepandas - 来自数据框的项目二分网络
【发布时间】:2015-07-09 14:13:29
【问题描述】:

我有一个代表加权二分网络的数据框,如下所示:

L1,L2,w
1,A,0.9
2,A,0.2
3,A,0.5
1,B,0.9
2,B,0.8

L1 列中的节点连接到 L2 列中的节点,每个边都有一个权重值 (w)。

我想将网络投影到 L1 级别。第一步是连接 L1 值,如果它们连接到相同的 L2 值,则乘以权重,例如:

1,2,0.9*0.2
2,3,0.2*0.5
1,3,0.9*0.5
1,2,0.9*0.8

第二步是构建一个新的数据框(加权边列表),总结重复边的权重:

1,2,0.9*0.2 + 0.9*0.8
2,3,0.2*0.5
1,3,0.9*0.5

我知道这有点奇怪;我使用 networkx bipartite 函数尝试了相同的方法,但是在其中处理权重有点棘手,所以我更喜欢使用 pandas 数据框。

【问题讨论】:

    标签: python pandas networkx


    【解决方案1】:
    df2 = df.merge(df,on='L2')
    
    df3 = df2[ df2.L1_x > df2.L1_y ]              # drop duplicates and matches to self
    
    df3['w'] = df3.w_x * df3.w_y                  # multiply weights
    
    df4 = df3.groupby(['L1_y','L1_x'])['w'].sum()
    
    L1_y  L1_x
    1     2       0.90
          3       0.45
    2     3       0.10
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 2017-06-05
      相关资源
      最近更新 更多