Skip to main content
 首页 » 编程设计

python之Pandas之为所有行(特别是)重复行提供唯一标识符

2025年05月04日13mayingbao

假设我有一个包含 5 列的 DF,我想为每一行创建一个唯一的“键”。

   a  b  c  d  e 
1  1  2  3  4  5 
2  1  2  3  4  6 
3  1  2  3  4  7  
4  1  2  2  5  6 
5  2  3  4  5  6 
6  2  3  4  5  6 
7  3  4  5  6  7 

我想创建一个“键”列,如下所示:

   a  b  c  d  e  key 
1  1  2  3  4  5  12345 
2  1  2  3  4  6  12346 
3  1  2  3  4  7  12347 
4  1  2  2  5  6  12256 
5  2  3  4  5  6  23456 
6  2  3  4  5  6  23456 
7  3  4  5  6  7  34567 

现在的问题当然是第 5 行和第 6 行是重复的。

我希望能够像这样创建唯一的 key :

   a  b  c  d  e  key 
1  1  2  3  4  5  12345_1 
2  1  2  3  4  6  12346_1 
3  1  2  3  4  7  12347_1 
4  1  2  2  5  6  12256_1 
5  2  3  4  5  6  23456_1 
6  2  3  4  5  6  23456_2 
7  3  4  5  6  7  34567_1 

不确定该怎么做,或者这是否是最好的方法 - 感谢您的帮助。

谢谢

编辑:列将主要是字符串,而不是数字。

请您参考如下方法:

方法是散列到每一行的元组:

In [11]: df.apply(lambda x: hash(tuple(x)), axis=1) 
Out[11]: 
1   -2898633648302616629 
2   -2898619338595901633 
3   -2898621714079554433 
4   -9151203046966584651 
5    1657626630271466437 
6    1657626630271466437 
7    3771657657075408722 
dtype: int64 
 
In [12]: df['key'] = df.apply(lambda x: hash(tuple(x)), axis=1) 
 
In [13]: df['key'].astype(str) + '_' + (df.groupby('key').cumcount() + 1).astype(str) 
Out[13]: 
1    -2898633648302616629_1 
2    -2898619338595901633_1 
3    -2898621714079554433_1 
4    -9151203046966584651_1 
5     1657626630271466437_1 
6     1657626630271466437_2 
7     3771657657075408722_1 
dtype: object 

注意:通常您不需要这样做(不清楚您为什么要这样做!)。