给定以下 df:
first second
0 a 3
1 b 5
2 a 2
3 e 9
4 c 2
5 d 7
6 d 8
7 c 5
我想将不同的“网络”分成它们自己的数据帧。所以例如a 到 2,但 2 也链接到 c,c 也链接到 5,等等,这意味着它们形成了一个网络。
这意味着您应该得到以下三个数据帧:
first second
0 a 3
1 b 5
2 a 2
3 c 5
4 c 2
first second
0 d 7
1 d 8
first second
0 e 9
有没有一种简单的方法可以做到这一点,有没有一种方法可以推广到任意数量的列?
谢谢!
答案 0 :(得分:3)
我们可以使用 networkx
中的 connected_components
对数据帧进行子集化
import networkx as nx
G = nx.from_pandas_edgelist(df, 'first', 'second')
[df.query('first in @cc') for cc in nx.connected_components(G)]
[ first second
0 a 3
1 b 5
2 a 2
4 c 2
7 c 5,
first second
3 e 9,
first second
5 d 7
6 d 8]