如何在Pandas DataFrame中标记重复行并标注重复组序号
在Pandas DataFrame中为重复行(排除指定列)分配组序号
需求说明
需要在Pandas DataFrame中标记重复行,为每组重复行分配连续序号(如1、2...),判断重复时不纳入id列的考量。
输入示例
| id | Country | City |
|---|---|---|
| 1 | France | Paris |
| 2 | France | Paris |
| 3 | France | Lyon |
| 4 | France | Lyon |
| 5 | France | Lyon |
解决方案
通过groupby结合ngroup()方法即可实现,无需手动判断重复,直接按非id列分组并分配组序号:
import pandas as pd # 构造输入DataFrame df = pd.DataFrame({ 'id': [1, 2, 3, 4, 5], 'Country': ['France', 'France', 'France', 'France', 'France'], 'City': ['Paris', 'Paris', 'Lyon', 'Lyon', 'Lyon'] }) # 排除id列,按剩余列分组并分配组序号(从1开始) df['duplicated_flag'] = df.groupby(df.columns.drop('id').tolist()).ngroup() + 1
输出结果
| id | Country | City | duplicated_flag |
|---|---|---|---|
| 1 | France | Paris | 1 |
| 2 | France | Paris | 1 |
| 3 | France | Lyon | 2 |
| 4 | France | Lyon | 2 |
| 5 | France | Lyon | 2 |
代码解释
df.columns.drop('id').tolist():自动获取除id外的所有列作为分组依据,避免手动列写列名(列数较多时更高效)ngroup():为每个分组分配从0开始的序号,加1后得到从1起始的组编号- 同一组内的所有行(即非id列完全相同的行)会获得相同的
duplicated_flag值
内容的提问来源于stack exchange,提问作者Marta Campos
相关产品推荐
相关产品推荐

