You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame不同列中存在关联的ID值划分到对应公共分组

ID关联分组解决方案

这个需求属于典型的连通分量提取场景,使用并查集(Union-Find) 算法可以高效实现,具体实现逻辑和代码如下:

核心逻辑

  • 初始化并查集结构,用于记录每个ID的所属根节点
  • 逐行遍历数据,将同一行的所有非空ID合并到同一个集合
  • 遍历所有ID,按根节点聚合得到最终分组

可运行代码示例

import pandas as pd
from collections import defaultdict

# 并查集基础实现
class UnionFind:
    def __init__(self):
        self.parent = {}
    
    def find(self, x):
        # 路径压缩优化
        if self.parent[x] != x:
            self.parent[x] = self.find(self.parent[x])
        return self.parent[x]
    
    def union(self, x, y):
        # 加入不存在的节点
        if x not in self.parent:
            self.parent[x] = x
        if y not in self.parent:
            self.parent[y] = y
        # 合并两个节点的集合
        root_x, root_y = self.find(x), self.find(y)
        if root_x != root_y:
            self.parent[root_y] = root_x

# ------------ 以下替换为你自己的数据读入逻辑 ------------
# 示例数据构造
raw_data = [
    [1,2,3,5,7],
    [1,2,None,None,None],
    [1,8,None,None,None],
    [3,9,None,None,None],
    [4,11,15,None,None],
    [4,17,None,None,None],
    [11,15,None,None,None],
    [17,4,18,None,None]
]
df = pd.DataFrame(raw_data, columns=['ID1','ID2','ID3','ID4','ID5'])
# ------------------------------------------------------

uf = UnionFind()
# 逐行处理合并ID
for _, row in df.iterrows():
    valid_ids = [val for val in row.tolist() if pd.notna(val)]
    if len(valid_ids) == 1:
        # 单个ID直接加入集合即可
        if valid_ids[0] not in uf.parent:
            uf.parent[valid_ids[0]] = valid_ids[0]
        continue
    # 以第一个ID为基准,合并同组所有ID
    base_id = valid_ids[0]
    for id_val in valid_ids[1:]:
        uf.union(base_id, id_val)

# 按根节点聚合分组
group_result = defaultdict(list)
for id_val in uf.parent:
    root = uf.find(id_val)
    group_result[root].append(id_val)

# 输出结果
for group in group_result.values():
    # 按数值排序后输出,不需要排序可删除sorted()
    print(','.join(map(str, sorted(group))))

运行输出

1,2,3,5,7,8,9
4,11,15,17,18

补充说明

  • 代码不限制ID列数量,自动适配任意列数的非空ID合并
  • 可根据需求调整输出格式,比如要转成单引号拼接格式,修改最后的输出逻辑即可。

内容的提问来源于stack exchange,提问作者Jui Sen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:27:02