我正在处理一个大熊猫数据框,其中有几列非常像这样:
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?
答案 0 :(得分:5)
按您要查找重复项的列进行分组并使用ngroup
:
df['new_id'] = df.groupby(['A','B','C','D']).ngroup()
答案 1 :(得分:3)
对于小型数据框,您可以将行转换为可以进行哈希处理的元组,然后使用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