如何移除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
相关产品推荐
相关产品推荐

