python - python在图中查找集群成员
问题描述
在 python 中,我试图解决我以前在 R 中遇到的相同问题:
import pandas as pd, numpy as np
df = pd.DataFrame({"id1": [1,1,2,2,3,3,4,4,5,5,6,6,np.NaN,np.NaN],
"id2": ['a',np.NaN,'a','c','c','d','x',np.NaN,'y','z','x','z',np.NaN,np.NaN],
"id3": [1,1,1,1,1,1,2,2,2,2,2,2,np.NaN,np.NaN]})
我希望 python 计算列id3
,即分配网络集群成员(理想情况下忽略 NA)
在 R 中:
g <- graph_from_data_frame(df, FALSE)
cg <- clusters(g)$membership
df$id4 <- cg[df$id1]
df
解决方案
我们可以生成一个networkx
源和目标设置为id1
and的无向图id2
,然后enumerate
在图中的连通分量上创建一个映射字典,并在列上创建map
这个字典id1
import networkx as nx
G = nx.from_pandas_edgelist(df.dropna(), 'id1', 'id2')
df['id3'] = df['id1'].map({c: i for i, cc in enumerate(
nx.connected_components(G), 1) for c in cc})
id1 id2 id3
0 1.0 a 1.0
1 1.0 NaN 1.0
2 2.0 a 1.0
3 2.0 c 1.0
4 3.0 c 1.0
5 3.0 d 1.0
6 4.0 x 2.0
7 4.0 NaN 2.0
8 5.0 y 2.0
9 5.0 z 2.0
10 6.0 x 2.0
11 6.0 z 2.0
12 NaN NaN NaN
13 NaN NaN NaN
推荐阅读
- python - 如何传递一个 url contains ?, / , & 内部烧瓶 webservice 方法
- python - 类变量在 for 循环中保持为空
- excel - EXCEL VBA 将多列转换为多行,列之间有间隙
- javascript - JS:画布循环不起作用
- opencl - 如何将 OpenCL 任务拆分成更小的块?
- android - 如何从android读取文件夹和文件?
- linux - Linux下读取连接USB-SD Reader的SDcard的CID
- vue.js - 在 vue js 上观看路由对象
- python - 我无法使用 discord.py 向我的不和谐机器人添加命令
- javascript - Three.js:将 6 Cube Panorama 设置为任意一侧(前、后、左等)