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

如何在Pandas中标记逐行重复项(重复组首行不标记)

解决重复行标记:仅标记组内非首行重复项

嘿,我懂你的需求——你想给重复行分组,每组的第一行标记为No,后面的重复行标记为Yes对吧?你之前用df.duplicated(keep=False)的问题在于,这个参数会把所有重复的行都标记为True(包括每组的第一行),所以没法实现你要的效果。

正确的实现步骤

Pandas的duplicated()方法其实自带了参数可以满足你的需求,关键是用keep='first'(这也是默认值,所以可以省略不写),它会保留每组重复项的第一行(标记为False),把组内后续的重复行标记为True。之后我们只需要把布尔值映射成Yes/No就行。

完整代码示例

import pandas as pd

# 构造你的示例DataFrame
data = {
    'Contaract_ID': [123, 128, 123, 123, 128, 128],
    'Date': ['2011-10-02 07:18:16', '2015-12-06 07:13:18', '2011-10-02 07:18:16', 
             '2011-10-02 07:18:16', '2016-12-06 07:13:18', '2016-12-06 07:13:18'],
    'value': [250, 200, 250, 250, 210, 210]
}
df = pd.DataFrame(data)

# 第一步:标记重复项(首行不标记)
df['Duplicate'] = df.duplicated(keep='first')  # keep='first'可以省略,因为是默认值

# 第二步:将布尔值转换为Yes/No
df['Duplicate'] = df['Duplicate'].map({True: 'Yes', False: 'No'})

# 查看结果
print(df)

输出结果

Contaract_ID                 Date  value Duplicate
0           123  2011-10-02 07:18:16    250        No
1           128  2015-12-06 07:13:18    200        No
2           123  2011-10-02 07:18:16    250       Yes
3           123  2011-10-02 07:18:16    250       Yes
4           128  2016-12-06 07:13:18    210        No
5           128  2016-12-06 07:13:18    210       Yes

为什么之前的方法不生效?

当你用df.duplicated(keep=False)时,这个参数会把所有存在重复的行都标记为True,不管是不是组内的第一行。比如你示例中Contaract_ID=123的三行都会被标记为True,这就不符合你“首行不标记”的要求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:27:31