【问题标题】:Link lists that share common elements共享共同元素的链接列表
【发布时间】:2020-08-25 16:58:38
【问题描述】:

我有一个与this one 类似的问题,但有一些不同/并发症

我有一个包含成员的组列表,而不是合并共享成员的组,我需要保留分组并根据哪些组具有共同成员创建一组新边,并根据组

源数据如下所示:

+---------+------------+------------+ |组号 |团体类型 |会员编号 | +---------+------------+------------+ |一个 |类型 1 | 1 | |一个 |类型 1 | 2 | |乙|类型 1 | 2 | |乙|类型 1 | 3 | | C |类型 1 | 3 | | C |类型 1 | 4 | | D |类型 2 | 4 | | D |类型 2 | 5 | +---------+------------+------------+

想要的输出是这样的:

+----------+------------------+ |组号 |关联组 ID | +----------+------------------+ |一个 |乙| |乙| C | +----------+------------------+

A 与 B 相关联,因为它共有 2 个 B 与 C 相关联,因为它共有 3 个 C 没有链接到 D,它有一个共同的成员,但属于不同的类型

共享成员的数量对我来说并不重要,一个共同的成员意味着他们是链接的

输出被用作图的边缘,所以如果输出是符合规则的图,那很好

源数据集很大(数亿行),因此需要考虑性能

This 提出了类似的问题,但是我是 Python 新手,不知道如何将源数据获取到可以使用答案的地步,或者在组类型的附加要求中工作匹配

【问题讨论】:

  • 嗨,欢迎来到 SO。您的类似问题使用了不同的连接组件概念。根据您的要求,B 不应与 E 连接(不太可能回答建议),不是吗?组类型和成员 ID 是否也已排序?
  • 谢谢你,在这里花了很多时间来获取提示,但这次真的很难过!示例中没有 E,如果这就是您的意思,就不会有模式?如果有帮助,可以从源头对组类型和成员 ID 进行排序
  • 我的意思是您提到的链接中的一种解决方案应该是一个很好的例子,说明您的问题不等同于查找连接的组件(尤其是这个:stackoverflow.com/questions/46200969/…)。在其中一个答案中找到了 [A, C][B, D, E] 组件,但 BE 不是您想要的合适的一对。

标签: python networkx connected-components


【解决方案1】:

试试这样的-

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

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

【讨论】:

  • 我可以使用它来获得所需的东西,看起来我想多了!非常感谢苏珊特
  • 不客气,SquirreledHogs,很高兴看到它有所帮助。
  • 然而,如果不使用 pandas 的逗号技巧,这似乎是一项非常具有挑战性的任务
猜你喜欢
  • 2011-06-18
  • 2023-03-07
  • 2021-07-25
  • 2018-05-19
  • 2022-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多