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

Pandas用for循环检测列重复值 解决duplicated()误判并拼接列值

问题根因
  • 循环内的判断语句df['col1'].duplicated().any()是对col1整列做全局重复校验,只要整列存在任意重复值,该判断就恒为True,和当前循环遍历到的具体行没有关联,因此每次循环都会触发拼接逻辑。
  • 触发拼接时的赋值语句是对col1整列所有行执行拼接操作,并非仅修改存在重复的行,最终导致所有行的col1值都被拼接修改。
  • 额外注意:代码中用tuple作为变量名会覆盖Python内置的tuple类型,属于不规范写法。
修复方案

Pandas支持向量化操作,无需手写for循环逐行遍历,直接通过布尔掩码定位重复行再定向修改即可,执行效率更高逻辑也更清晰:

import pandas as pd

data = [['Jake','NY'],['Tom','Montana'],['Hannah','Cali'],['Jason','Boston'],['Tom','Washington'],['Hannah','Florida']]
df = pd.DataFrame(data, columns=('col1', 'col2'))

# 生成重复值掩码:keep=False表示将所有重复出现的行(含首次出现的重复项)标记为True
# 如果需要保留首次出现的重复值原值,仅修改后续重复项,将keep=False改为keep='first'即可
dup_mask = df['col1'].duplicated(keep=False)
# 仅对掩码为True的重复行执行col1和col2的拼接
df.loc[dup_mask, 'col1'] = df.loc[dup_mask, 'col1'] + ' - ' + df.loc[dup_mask, 'col2']

执行后col1列的结果为:

  • Jake(无重复,保持原值)
  • Tom - Montana
  • Hannah - Cali
  • Jason(无重复,保持原值)
  • Tom - Washington
  • Hannah - Florida

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:06:19