如何在Python分组中识别DataFrame的重复行?
解决方案
你可以通过 Pandas 的 groupby 结合 transform 和 duplicated 方法快速实现需求,以下是两种常见场景的代码实现:
场景1:标记组内所有重复的行(包括首次出现的重复项)
这种方式会把同一ID 1分组内,所有重复的ID 2行都标记为True。
示例代码
import pandas as pd # 构造示例输入DataFrame df = pd.DataFrame({ 'ID 1': ['A', 'A', 'A', 'B', 'B', 'B'], 'ID 2': [100, 100, 200, 300, 400, 300] }) # 新增标记列 df['is_duplicate'] = df.groupby('ID 1')['ID 2'].transform(lambda x: x.duplicated(keep=False))
输出结果
| ID 1 | ID 2 | is_duplicate |
|---|---|---|
| A | 100 | True |
| A | 100 | True |
| A | 200 | False |
| B | 300 | True |
| B | 400 | False |
| B | 300 | True |
场景2:仅标记组内非首次出现的重复行
这种方式会保留每个ID 2的首次出现,仅将后续重复的行标记为True。
示例代码
import pandas as pd df = pd.DataFrame({ 'ID 1': ['A', 'A', 'A', 'B', 'B', 'B'], 'ID 2': [100, 100, 200, 300, 400, 300] }) # 新增标记列(默认keep='first',可省略) df['is_duplicate'] = df.groupby('ID 1')['ID 2'].transform('duplicated')
输出结果
| ID 1 | ID 2 | is_duplicate |
|---|---|---|
| A | 100 | False |
| A | 100 | True |
| A | 200 | False |
| B | 300 | False |
| B | 400 | False |
| B | 300 | True |
自定义标记文本(可选)
如果需要用字符串替代布尔值标记,可通过map转换:
df['is_duplicate'] = df.groupby('ID 1')['ID 2'].transform(lambda x: x.duplicated(keep=False)).map({True: '重复', False: '不重复'})
内容的提问来源于stack exchange,提问作者DANIEL GARCIA DE CACERES HERRA
相关产品推荐
相关产品推荐

