如何遍历pandas dataframe删除names列中已出现过的重复姓名
解决思路
维护一个全局集合存储已经出现过的姓名,逐行过滤names列的内容即可,不需要手动遍历整个DataFrame。
完整可运行代码
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'names': ['Jones, Tom, Eddy', 'Nick, Tim, Bob', 'Jones, Eddy, Luke', 'Timmy, Jones, Sam'], 'score': [119, 222, 221, 112] }) seen = set() def filter_name(name_str): global seen # 拆分姓名并去除多余空格 name_list = [n.strip() for n in name_str.split(',')] # 筛选从未出现过的姓名 new_names = [n for n in name_list if n not in seen] # 将本次新出现的姓名加入已出现集合,供后续行过滤用 seen.update(new_names) # 拼接回字符串格式 return ', '.join(new_names) df['WhatIWant'] = df['names'].apply(filter_name) print(df)
输出结果
names score WhatIWant 0 Jones, Tom, Eddy 119 Jones, Tom, Eddy 1 Nick, Tim, Bob 222 Nick, Tim, Bob 2 Jones, Eddy, Luke 221 Luke 3 Timmy, Jones, Sam 112 Timmy, Sam
如果你的数据里存在空值,在拆分姓名前加个非空判断即可兼容。
内容的提问来源于stack exchange,提问作者Archi
相关产品推荐
相关产品推荐

