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

如何在Pandas DataFrame列中排除指定子串后检测重复值

优化方案:排除指定位置子串检测DataFrame列重复值

针对需求——检测DataFrame某列重复值时排除指定位置的子串(如示例中的版本号verX),以下是两种高效实现方案:

方法一:固定格式拆分重组

当列元素格式固定(如示例中前缀_verX_状态的下划线分隔结构),直接拆分字符串并保留核心部分:

import pandas as pd
from numpy import nan

df = pd.DataFrame({'ID': ['id1_ver1_ready', 'id2_ver1_unknown', 'id3_ver1_processed', 'id1_ver3_ready', 'id4_ver1_ready', 'id5_ver1_unknown', 'id5_ver6_unknown', 'id6_ver1_processed']})

# 拆分ID,提取排除版本号后的核心标识
df['core_id'] = df['ID'].str.split('_').apply(lambda x: f"{x[0]}_{x[2]}")

# 标记所有重复项(keep=False会标记所有重复出现的行,而非仅后续行)
df['is_duplicate'] = df['core_id'].duplicated(keep=False)

此方法逻辑直观,处理速度快,适合格式完全固定的场景。

方法二:正则表达式替换

若子串格式存在变化(如版本号可能是v1/ver2.0等),用正则匹配并替换目标子串更灵活:

import pandas as pd
from numpy import nan

df = pd.DataFrame({'ID': ['id1_ver1_ready', 'id2_ver1_unknown', 'id3_ver1_processed', 'id1_ver3_ready', 'id4_ver1_ready', 'id5_ver1_unknown', 'id5_ver6_unknown', 'id6_ver1_processed']})

# 正则匹配并移除版本号部分(匹配"_ver+数字_"结构,替换为单个下划线)
df['core_id'] = df['ID'].str.replace(r'_ver\d+_', '_')

# 标记重复项
df['is_duplicate'] = df['core_id'].duplicated(keep=False)

正则表达式可根据实际子串格式调整,适配更多复杂场景。

结果示例

处理后df的is_duplicate列会标记:

  • id1_ver1_ready与id1_ver3_ready为重复项
  • id5_ver1_unknown与id5_ver6_unknown为重复项

内容的提问来源于stack exchange,提问作者Saly07

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:20:07