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

pandas如何将列中第二次及以后出现的重复值替换为另一列对应值

实现方案

核心是通过pandas内置的重复值标记方法定位需要替换的行,直接做向量化赋值即可,不需要逐行遍历。

实现代码

如果需要复现测试,可以先构造对应结构的示例数据:

import pandas as pd

# 匹配问题给出的原始数据结构
df = pd.DataFrame({
    'Sl': [1, 2, 3, 4, 5],
    'Name': ['abc', 'pqr', 'abc', 'abc', 'cde'],
    'Name2': ['abc e', 'lmn o', 'abc e', 'krs', 'rmn']
})

执行替换逻辑仅需两行代码:

# 标记Name列中所有非首次出现的重复行,首次出现的取值不标记
replace_mask = df['Name'].duplicated(keep='first')
# 将标记行的Name列值替换为对应行的Name2取值
df.loc[replace_mask, 'Name'] = df.loc[replace_mask, 'Name2']

执行结果

运行后打印df得到的输出如下,完全匹配替换要求:

Sl   Name  Name2
0   1    abc  abc e
1   2    pqr  lmn o
2   3  abc e  abc e
3   4    krs    krs
4   5    cde    rmn

说明:你给出的目标示例里第一行Name2显示为abc属于排版对齐偏差,上述逻辑不会修改Name2列的原始值,如果需要同步调整Name2列的取值,补充对应赋值语句即可。

逻辑说明

  • duplicated(keep='first')是pandas专门用于标记重复值的方法,传入keep='first'参数时,会把每个取值第一次出现的行标记为False(不需要替换),后续所有重复出现的行标记为True(需要替换),完全匹配“从第二次重复出现开始替换”的规则。
  • 用df.loc做定位赋值是pandas的原生向量化操作,执行效率远高于apply或者手写循环,数据量大的时候性能优势非常明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:45:46