Python中如何删除DataFrame行内列表重复字符串,仅保留唯一值
实现列表列去重的方法
方法1:无需保留原有顺序(代码最简)
直接利用集合自动去重的特性转换即可:
df['Name'] = df['Name'].apply(lambda x: list(set(x)))
注意:集合是无序结构,处理后列表内元素的顺序会被打乱,如果你需要保留名称第一次出现的顺序,请用下面的方法。
方法2:保留原有出现顺序
Python 3.7+版本中字典默认保留插入顺序,可通过dict.fromkeys实现有序去重:
df['Name'] = df['Name'].apply(lambda x: list(dict.fromkeys(x)))
方法3:用pandas原生操作实现(适合大表性能更优)
通过打散列表、按网格ID+名称去重后重新聚合,也能实现有序去重:
df = df.explode('Name') \ .drop_duplicates(subset=['GRID ID', 'Name'], keep='first') \ .groupby('GRID ID', as_index=False)['Name'] \ .agg(list)
处理后效果示例
以你给出的AC-59行数据为例,处理后结果为:
GRID ID | Name AC-59 | ['Laguna di Venezia', 'Laguna di Venezia: Valle Averto', 'Laguna medio-inferiore di Venezia']
所有重复名称仅保留1个,符合需求。
内容的提问来源于stack exchange,提问作者hrbrnsn
相关产品推荐
相关产品推荐

