python - Pandas - 为所有行(特别是)重复行提供唯一标识符
问题描述
假设我有一个 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 行是重复的。
我希望能够像这样创建唯一键:
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
注意:通常您不需要这样做(不清楚为什么要这样做!)。
推荐阅读
- mysql - MySQL Group By 用于排序表
- php - 如何在laravel中使用与数组的关系
- javascript - 如何使我的搜索栏在聚焦时不会折叠?
- powershell - 查找两个文件的差异并附加到第一个文件 powershell
- c# - 如何在 .NET Core Web API 的 Dictionary 键中将枚举转换为 int
- javascript - 如何通过执行切片用地图重写推送?
- reactjs - 在类组件中反应 useEffect 等效项
- deep-learning - 是否可以在 FPGA 上训练 YOLO - 对象检测模型?
- javascript - next() 在 Express 4 上不起作用,错误 [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
- docker - launch ElasticSearch in Docker Plesk