如何在Pandas中用首次出现的Title值标记重复行?
解决方案
你可以通过分组提取首个title结合条件赋值来实现需求,以下是完整代码和步骤说明:
完整实现代码
import pandas as pd # 初始化DataFrame df = pd.DataFrame({'title': [1, 2, 3, 4, 5, 6, 7, 8], 'val1': [1.1, 1.1, 2.1, 8.8, 1.1, 1.1, 8.8, 8.8], 'val2': [2.2, 3.3, 5.5, 6.2, 2.2, 3.3, 6.2, 6.2], 'val3': [3.4, 4.4, 5.5, 8.4, 0.5, 3.4, 1.9, 3.7] }) # 先标记所有重复行(你已完成的步骤) df['duplicate'] = df.duplicated(keep=False, subset=['val1', 'val2']) # 核心步骤:生成first_occurence列 # 1. 按val1、val2分组,提取每组首个title并广播到组内所有行 first_title = df.groupby(['val1', 'val2'])['title'].transform('first') # 2. 生成初始标记值(格式为titleX) df['first_occurence'] = 'title' + first_title.astype(str) # 3. 替换首次出现的行为True,非重复行为False is_first_in_group = ~df.duplicated(subset=['val1', 'val2'], keep='first') df.loc[is_first_in_group, 'first_occurence'] = True df.loc[~df['duplicate'], 'first_occurence'] = False # 查看目标结果列 print(df[['title', 'val1', 'val2', 'first_occurence']])
执行结果
title val1 val2 first_occurence 0 1 1.1 2.2 True 1 2 1.1 3.3 True 2 3 2.1 5.5 False 3 4 8.8 6.2 True 4 5 1.1 2.2 title1 5 6 1.1 3.3 title2 6 7 8.8 6.2 title4 7 8 8.8 6.2 title4
关键步骤解释
- 分组提取首个title:
groupby.transform('first')会为每个(val1, val2)组合的所有行,返回该组第一行的title值,确保重复组内的所有行都能关联到首次出现的title。 - 格式转换:将首个title拼接成
titleX的字符串格式,作为重复行的标记内容。 - 条件替换:
~df.duplicated(..., keep='first')筛选出每组的第一行,将其标记为True~df['duplicate']筛选出无重复的行,将其标记为False
内容的提问来源于stack exchange,提问作者nsog8sm43x
相关产品推荐
相关产品推荐

