我有一张表,其中所有父母都与孩子相关联。一位父母可以有一个或多个孩子。一个孩子可以有多个父母之一。任何没有任何链接的项目都不在链接表中。这是它的外观示例。
家长 | 孩子 |
---|---|
A | B |
A | C |
A | D |
D | E |
G | H |
我 | J |
J | K |
L | M |
O | M |
N | P |
问 | R |
R | P |
我理想的输出是一个家庭中所有项目的列表。例如:
Family 1 = [A, B, C, D, E]
Family 2 = [G, H]
Family 3 = [I, J, K]
Family 4 = [L, M, O]
Family 5 = [P, N, Q, R]
我尝试过的事情:
我有大约 15000 个链接,我想这样做,并且正在寻找有效的东西。我对 python 和 SQL 以及递归或其他方法的使用持开放态度。谢谢!
假设你有这个数据框:
Parent Child
0 A B
1 A C
2 A D
3 D E
4 G H
5 I J
6 J K
7 L M
8 O M
9 N P
10 Q R
11 R P
然后可以使用
networkx
来获取所有连通分量:
import networkx as nx
G = nx.Graph()
for p, c in zip(df.Parent, df.Child):
G.add_edge(p, c)
for c in nx.connected_components(G):
print(c)
打印:
{'A', 'C', 'D', 'B', 'E'}
{'G', 'H'}
{'K', 'J', 'I'}
{'M', 'L', 'O'}
{'P', 'R', 'N', 'Q'}