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

如何移除DataFrame列中每行的重复四位数字串

DataFrame列中逗号分隔四位数字组的去重方案

问题根源

你之前用的代码df['ID'] = df['ID'].apply(lambda x: list(set(x)))之所以出错,是因为直接对字符串调用set()会把字符串拆成单个字符——比如"1400"会被拆成{'1','4','0'},自然得到的是单个数字的集合,完全偏离了你的需求。

正确处理思路

要实现四位数字组的去重,得按以下步骤来:

  • 把每行的字符串按逗号分割成独立的四位数字元素
  • 对这些元素去重(可选保留原顺序)
  • 把去重后的元素重新拼接成逗号分隔的字符串

具体代码实现

方案1:保留原出现顺序

如果需要维持原数字组的先后顺序,用这个函数:

def dedup_ids(s):
    # 分割字符串,同时去掉每个元素前后的空格
    items = [item.strip() for item in s.split(',')]
    # 去重并保持顺序
    seen = set()
    unique_items = []
    for item in items:
        if item not in seen:
            seen.add(item)
            unique_items.append(item)
    # 重新拼接成目标格式
    return ', '.join(unique_items)

df['ID'] = df['ID'].apply(dedup_ids)

方案2:简化写法(不保证顺序)

如果不在乎数字组的顺序,也可以用更简洁的写法:

df['ID'] = df['ID'].apply(lambda x: ', '.join(set([item.strip() for item in x.split(',')])))

注意:这种方法会打乱原顺序,比如原先是1400在前,处理后可能跑到后面去。

效果验证

拿你给的示例输入:

1400, 1400, 1400, 1455, 1455, 1455, 1670, 1670, 1670

两种方案都会输出你想要的结果:

1400, 1455, 1670

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:20:38