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

