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
我有一个代表加权二分网络的数据框,如下所示:
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