如何删除Pandas DataFrame中ID列的重复内容?
解决Pandas DataFrame中ID列去重问题
问题描述
现有如下DataFrame:
import pandas as pd df3 = pd.DataFrame({'ID': ['Stay home, T5006, T5006, Stay home', 'Go for walk, T5007, T5007, Go for walk'], 'Name': ['Stay home, Go for walk, Stay home', 'Go outside, Go outside, Go outside'] })
对应的表格:
| ID | Name | |
|---|---|---|
| 0 | Stay home, T5006, T5006, Stay home | Stay home, Go for walk, Stay home |
| 1 | Go for walk, T5007, T5007, Go for walk | Go outside, Go outside, Go outside |
需要删除ID列中的重复内容,得到预期结果:
| ID | Name | |
|---|---|---|
| 0 | Stay home,T5006 | Stay home, Go for walk, Stay home |
| 1 | Go for walk,T5007 | Go outside, Go outside, Go outside |
解决方法
可以通过apply方法结合字符串分割、去重、合并来实现:
# 定义处理函数:分割字符串、去除空格、去重、合并 def remove_duplicates(s): # 按逗号分割,去除每个元素的前后空格 items = [item.strip() for item in s.split(',')] # 去重并保留首次出现的顺序 unique_items = list(dict.fromkeys(items)) # 用逗号拼接成字符串 return ','.join(unique_items) # 对ID列应用处理函数 df3['ID'] = df3['ID'].apply(remove_duplicates)
执行后查看结果:
print(df3)
输出:
ID Name 0 Stay home,T5006 Stay home, Go for walk, Stay home 1 Go for walk,T5007 Go outside, Go outside, Go outside
说明
dict.fromkeys(items)在去重的同时能保留元素首次出现的顺序,比set更适配需要维持原有顺序的场景。strip()用于清除每个元素前后的空格,避免因空格导致的“伪重复”(比如"Stay home"和" Stay home"被误判为不同内容)。- 若无需保留顺序,也可以用
list(set(items))替代,但元素顺序会被打乱,按需选择即可。
内容的提问来源于stack exchange,提问作者xavi
相关产品推荐
相关产品推荐

