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

如何移除Pandas DataFrame中嵌套列表列的重复项并合并两列

解决Pandas嵌套列表列去重合并问题

错误原因

你之前的代码抛出TypeError: unhashable type: 'list',是因为列表(list)属于不可哈希类型,无法直接存入集合(set)进行交集、并集这类集合操作。

解决方案

方法一:保留原顺序的去重合并(匹配你的期望输出)

通过手动遍历,先保留col1的所有元素,再添加col2中不存在的元素,同时利用元组的可哈希特性做存在性判断:

import pandas as pd

df = pd.DataFrame({'col1':[[[1452, 5099], [1418, 499]], [[1427, 55099]]],
                   'col2':[[[1452, 5099], [1417, 490]], [[1317, 55010]]]})

def merge_unique_ordered(l1, l2):
    merged = l1.copy()
    # 将l1的子列表转为元组,用于快速判断是否存在
    l1_tuples = set(tuple(sub) for sub in l1)
    # 遍历l2,添加不在l1中的元素
    for sub_list in l2:
        sub_tuple = tuple(sub_list)
        if sub_tuple not in l1_tuples:
            merged.append(sub_list)
    return merged

# 对每一行应用合并函数
df['result'] = [merge_unique_ordered(l1, l2) for l1, l2 in zip(df['col1'], df['col2'])]
print(df)

执行后输出和你的期望完全一致:

col1                               col2                                           result
0  [[1452, 5099], [1418, 499]]  [[1452, 5099], [1417, 490]]  [[1452, 5099], [1418, 499], [1417, 490]]
1                [[1427, 55099]]                [[1317, 55010]]                [[1427, 55099], [1317, 55010]]

方法二:集合去重合并(简洁但顺序不固定)

如果不介意元素顺序,可以将嵌套列表转为可哈希的元组,利用集合的去重特性快速合并:

def merge_unique(l1, l2):
    # 转元组存入集合去重
    set1 = set(tuple(sub) for sub in l1)
    set2 = set(tuple(sub) for sub in l2)
    # 合并后转回嵌套列表
    return [list(item) for item in set1.union(set2)]

df['result'] = [merge_unique(l1, l2) for l1, l2 in zip(df['col1'], df['col2'])]

注意:集合是无序的,最终结果的元素顺序可能和原列不同。

内容的提问来源于stack exchange,提问作者data en

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:01:45