在熊猫的数据框中分离“网络”

时间:2021-06-14 09:53:14

标签: python pandas

给定以下 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

有没有一种简单的方法可以做到这一点,有没有一种方法可以推广到任意数量的列?

谢谢!

1 个答案:

答案 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]