Link 个具有共同元素的列表

Link lists that share common elements

我有一个类似于 this one 的问题,其中有几个 differences/complications

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

源数据如下所示:

+----------+------------+-----------+
| 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 没有链接到D,它有一个共同的成员但类型不同

共享成员的数量对我来说无关紧要,一个共同的成员意味着他们相互关联

输出被用作图的边,因此如果输出是符合规则的图就没问题

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

提出了一个类似的问题,但是我是 Python 的新手,无法弄清楚如何将源数据获取到可以使用答案或工作的地步在组类型匹配的附加要求中

试试这样的东西-

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

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