【问题标题】:How to create clusters/groups from knowing associations? [closed]如何从已知的关联中创建集群/组? [关闭]
【发布时间】:2020-04-07 11:01:06
【问题描述】:

我有一个包含 2 列的数据框:[ID, ASSOCIATED_ID] 对于每个 ID,我都有一个来自数据帧的其他关联 IDS 的列表。 这是它的合成版本:

ID            ASSOCIATED_ID
1             [2,3]
2             [1,4]
3             [1]
4             [2]
5             []

如果我想创建相互关联的 ID 集群(组)(不一定它们具有直接关联,但即使存在任何传递关联)。我怎样才能以编程方式做到这一点?

【问题讨论】:

标签: python python-3.x pandas algorithm cluster-analysis


【解决方案1】:

IIUC,你可以使用networkx和connect_components:

df_e = df.explode('ASSOCIATED_ID')

G = nx.from_pandas_edgelist(df_e, 'ID','ASSOCIATED_ID')

[i for i in nx.connected_components(G)]

输出:

[{1, 2, 3, 4}, {nan, 5}]

【讨论】:

  • 感谢您的回复。这很有帮助。还有什么方法可以让我获得集群的所有元素彼此直接相关的集群。类似于完全连接的集群。我知道这可能会增加集群的数量,并且某些元素可能存在于多个集群中,对吧?
  • 是的,您可以使用 connected_component_subgraph 返回连接组件的实际子图。
  • 我尝试使用 connected_component_subgraph 但它返回一个生成器对象而不是集群本身。我想要那种输出:``` [i for i in nx.connected_components(G)] ``` 返回给我。只是不同之处在于 connected_components 返回所有元素直接或间接相互关联的集群,而我需要的是获得每个元素彼此严格直接关联的集群。
  • @aahayshah 想看到集群做什么?一个元组?您可以编辑问题以添加您的预期输出吗?
  • 或者...更好的是,开始一个新问题并参考这个问题。
猜你喜欢
  • 2021-01-11
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多