pandas - 从数据框项目二分网络

pandas - project bipartite network from dataframe

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

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 二分函数尝试了相同的方法,但是在其中处理权重有点棘手,所以我更喜欢使用 pandas 数据帧。

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