You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 02:14:58