如何为 Pandas 数据帧中的重复行分配唯一 ID?

8

我正在处理一个大型的Pandas数据框,其中有多列数据类似于这样:

A      B         C    D   

John   Tom       0    1
Homer  Bart      2    3
Tom    Maggie    1    4 
Lisa   John      5    0
Homer  Bart      2    3
Lisa   John      5    0
Homer  Bart      2    3
Homer  Bart      2    3
Tom    Maggie    1    4

如何给每个重复的行分配唯一的ID?例如:
A      B         C    D      new_id

John   Tom       0    1.2      1
Homer  Bart      2    3.0      2
Tom    Maggie    1    4.2      3
Lisa   John      5    0        4
Homer  Bart      2    3        5
Lisa   John      5    0        4
Homer  Bart      2    3.0      2
Homer  Bart      2    3.0      2
Tom    Maggie    1    4.1      6

我知道可以使用duplicate来检测重复的行,但是我无法可视化哪些行在重复。我尝试过:

df.assign(id=(df.columns).astype('category').cat.codes)
df

然而,它并不起作用。我该如何获取唯一的ID以便检测重复行的组?

在你的例子中,我相信 new_id 应该是 1、2、3、4、2 等等? - jpp
1
可能是如何标记相同的pandas数据帧行?的重复问题。 - rafaelc
2个回答

9

对于小型数据框,您可以将行转换为元组(可以哈希),然后使用pd.factorize

df['new_id'] = pd.factorize(df.apply(tuple, axis=1))[0] + 1

groupby对于较大的数据框更有效:

df['new_id'] = df.groupby(df.columns.tolist(), sort=False).ngroup() + 1

8

按照您想查找重复项的列进行分组,并使用 ngroup

df['new_id'] = df.groupby(['A','B','C','D']).ngroup()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接