共享共同元素的链接列表

时间:2020-08-25 16:58:38

标签: python networkx connected-components

我遇到的问题类似于this one,但有一些区别/复杂之处

我有一个包含成员的组的列表,而不是合并共享成员的组,我需要保留这些分组并根据哪些组具有相同的成员来创建新的边集,并有条件地基于的属性小组

源数据如下:

+----------+------------+-----------+
| Group ID | Group Type | Member ID |
+----------+------------+-----------+
| A        | Type 1     |         1 |
| A        | Type 1     |         2 |
| B        | Type 1     |         2 |
| B        | Type 1     |         3 |
| C        | Type 1     |         3 |
| C        | Type 1     |         4 |
| D        | Type 2     |         4 |
| D        | Type 2     |         5 |
+----------+------------+-----------+

所需的输出是这样的:

+----------+-----------------+
| Group ID | Linked Group ID |
+----------+-----------------+
| A        | B               |
| B        | C               |
+----------+-----------------+

A之所以链接到B是因为它共享2个共同点 B链接到C,因为它共享3 C是 not 并没有链接到D,它有一个共同的成员,但类型不同

共享成员的数量对我而言并不重要,一个成员通常意味着它们已链接

输出被用作图形的边缘,因此,如果输出是符合规则的图形

源数据集很大(亿行),因此性能是一个考虑因素

This提出了类似的问题,但是我是Python的新手,无法弄清楚如何使源数据达到我可以使用答案或满足以下要求的额外要求:组类型匹配

1 个答案:

答案 0 :(得分:1)

尝试这样的事情-

df1=df.groupby(['Group Type','Member ID'])['Group ID'].apply(','.join).reset_index()
df2=df1[df1['Group ID'].str.contains(",")]

这可能无法处理循环分组的情况。