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

Python DataFrame含列表列时排除指定列保留首行去重实现方法

实现思路

核心是解决两个痛点:列表不可哈希、列表元素顺序不影响重复判定,具体步骤如下:

  1. 构造可哈希的临时判断列:对THREE列的每个列表元素先排序,再转为元组,既消除了元素顺序的影响,又满足drop_duplicates对可哈希类型的要求
  2. 去重判断子集指定为ONE列 + 临时列,相当于排除TWO列参与重复判定,保留默认的keep='first'规则保留首次出现的条目
  3. 去重完成后删除临时列即可得到结果
代码实现
import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'ONE': ['A', 'A', 'B', 'B', 'C', 'C', 'C', 'C'],
    'TWO': ['A1', 'A2', 'B1', 'B2', 'C1', 'C2', 'C3', 'C4'],
    'THREE': [
        ['1','2','3'], ['3','2','1'], 
        ['1','2'], ['1','2','3'],
        ['1','2','3'], ['3','2','1'],
        ['1','2'], ['2','1']
    ]
})

# 生成临时哈希列,消除THREE列元素顺序影响
df['tmp_hash'] = df['THREE'].apply(lambda x: tuple(sorted(x)))
# 按指定列去重后删除临时列
df_result = df.drop_duplicates(subset=['ONE', 'tmp_hash']).drop(columns='tmp_hash')

print(df_result)
输出结果
ONE TWO          THREE
0   A  A1  ['1', '2', '3']
2   B  B1       ['1', '2']
3   B  B2  ['1', '2', '3']
4   C  C1  ['1', '2', '3']
6   C  C3       ['1', '2']

(注:索引和示例预期的差异是因为示例索引从1开始,Python默认索引从0开始,可自行调整索引显示规则)

方案说明

如果THREE列存在重复元素的场景(比如['1','1','2']和['1','2','1']),排序转元组的方案也能正确识别为重复,相比用frozenset转换的方案不会出现重复元素被误判的问题,适用性更广。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:06:10