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

如何高效判断Pandas序列中扁平列表的元素唯一性(替代apply逐行迭代)

问题描述

我的DataFrame某一列存储着扁平列表,需要生成新列element_unique:当列表无重复元素时返回1,存在重复元素时返回0。目前我通过apply逐行迭代实现了需求,想知道有没有无需逐行迭代的更高效实现方式?

输入数据

import pandas as pd

df = pd.DataFrame(data={                                                                    
    'key':   ["A", "B", "C", "D"],                                                          
    'dim': [["3", "1", "2"], [6, 5, 6], ["1"], ["2", "2"]]
})    
df
#   key        dim
# 0   A  ['3', '1', '2']
# 1   B  [6, 5, 6]
# 2   C        ['1']
# 3   D     ['2', '2']

当前实现代码

def is_list_of_unique_values(list_):                                                        
    if len(list_) == len(set(list_)):                                                       
        return 1                                                                            
    return 0                                                                                
                                                                                     
df.loc[:, "element_unique"] = df["dim"].apply(is_list_of_unique_values) 

df
#   key        dim  element_unique
# 0   A  ['3', '1', '2']               1
# 1   B  [6, 5, 6]               0
# 2   C        ['1']               1
# 3   D     ['2', '2']               0
高效实现方案

方法1:矢量化字符串方法(最简洁高效)

pandas的str方法支持直接对列表列操作,通过对比列表长度和列表内唯一元素数量生成结果:

df['element_unique'] = (df['dim'].str.nunique() == df['dim'].str.len()).astype(int)

这是完全的矢量化操作,避免了逐行迭代,在大数据量下效率远高于apply。

方法2:explode + 分组统计

通过展开列表后分组统计唯一值数量,再和原列表长度对比:

# 展开列表并分组统计每个key对应的唯一元素数
unique_counts = df.explode('dim').groupby('key')['dim'].nunique()
# 获取原列表长度
list_lengths = df['dim'].str.len()
# 对比后生成目标列
df['element_unique'] = (unique_counts == list_lengths).astype(int)

方法3:列表推导式(比apply快的逐行实现)

如果偏好纯Python风格的实现,列表推导式的执行效率显著高于apply:

df['element_unique'] = [1 if len(set(x)) == len(x) else 0 for x in df['dim']]

以上三种方法均能得到与原代码一致的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:24:48