如何判断Pandas DataFrame单元格内列表元素是否存在重复
标记Pandas列表列中的重复元素
要判断DataFrame的列表列中是否包含重复元素,核心思路是利用集合自动去重的特性:对比原列表长度与转成集合后的长度,若集合长度小于原列表长度,说明存在重复元素。
错误方法分析
- 用
any(i == x[0] for i in x):因为列表第一个元素必然等于自身,所以所有行都会返回True,完全无法区分重复情况。 - 用
all(i == x[0] for i in x):仅当列表所有元素都和第一个元素相同时才返回True,无法识别"部分元素重复"的场景(比如['22','22','34'])。
正确实现代码
import pandas as pd # 测试用例1:列表长度为2的情况 df1 = pd.DataFrame({ 'List': [['22', '65'], ['22', '22'], ['22', '91']], }) df1['Has_Duplicates'] = df1['List'].apply(lambda x: len(x) != len(set(x))) print(df1) # 测试用例2:包含部分重复元素的长列表 df2 = pd.DataFrame({ 'List': [['22', '65'], ['22', '22','34'], ['22', '91']], }) df2['Has_Duplicates'] = df2['List'].apply(lambda x: len(x) != len(set(x))) print(df2)
输出结果
第一个测试用例输出:
List Has_Duplicates 0 [22, 65] False 1 [22, 22] True 2 [22, 91] False
第二个测试用例输出:
List Has_Duplicates 0 [22, 65] False 1 [22, 22, 34] True 2 [22, 91] False
补充说明
如果列表中包含不可哈希元素(比如嵌套列表),set()无法直接使用,此时可以通过统计元素出现次数来判断:
from collections import Counter df['Has_Duplicates'] = df['List'].apply(lambda x: any(count > 1 for count in Counter(x).values()))
内容的提问来源于stack exchange,提问作者oymonk
相关产品推荐
相关产品推荐

