如何按DataFrame中含子串的列去重,保留首次出现的行?
基于Room子串对DataFrame去重并保留首次出现行
原始数据
import pandas as pd df = pd.DataFrame({ 'ID': [1, 2, 3, 4, 5], 'Components': ['Room 1, ABC', 'Room 2, ABC', 'Room 3, DEF', 'Room 1, DEF', 'Room 3, DEF'] })
需求说明
需要按Components列中的Room n子串去重,每个Room仅保留首次出现的行,忽略子串后的其他内容(如ABC、DEF)。
解决方案
核心思路是先提取出每行的Room标识,再基于该标识去重:
# 提取Room子串作为临时列 df['Room'] = df['Components'].str.extract(r'(Room \d+)') # 按Room列去重,保留首次出现的行,最后删除临时列 filtered_df = df.drop_duplicates(subset='Room', keep='first').drop(columns='Room')
输出结果
ID Components 0 1 Room 1, ABC 1 2 Room 2, ABC 2 3 Room 3, DEF
补充说明
- 正则表达式
(Room \d+)用于精准匹配"Room + 数字"的格式,如果Room标识包含字母或其他字符,可调整为(Room \w+); - 若不想创建临时列,也可以直接在
drop_duplicates中使用提取逻辑(可读性稍弱):filtered_df = df.loc[df['Components'].str.extract(r'(Room \d+)')[0].drop_duplicates(keep='first').index]
内容的提问来源于stack exchange,提问作者Andy Paling
相关产品推荐
相关产品推荐

