我想为用户生成一个基于整数的唯一ID(在我的df中)。
假设我有:
index first last dob
0 peter jones 20000101
1 john doe 19870105
2 adam smith 19441212
3 john doe 19870105
4 jenny fast 19640822
我想生成一个ID列,如下所示:
index first last dob id
0 peter jones 20000101 1244821450
1 john doe 19870105 1742118427
2 adam smith 19441212 1841181386
3 john doe 19870105 1742118427
4 jenny fast 19640822 1687411973
10位ID,但这是基于字段的值的(john doe相同的行值将获得相同的ID)。
我已经研究了散列,加密和UUID,但找不到与此特定的非安全用例有很多关系。只是要生成一个内部标识符。
感觉好像我可能以错误的方式来解决这个问题,因为我找不到很多文献!
谢谢
答案 0 :(得分:1)
这是使用numpy的一种方式
import numpy as np
np.random.seed(1)
# create a list of unique names
names = df[['first', 'last']].agg(' '.join, 1).unique().tolist()
# generte ids
ids = np.random.randint(low=1e9, high=1e10, size = len(names))
# maps ids to names
maps = {k:v for k,v in zip(names, ids)}
# add new id column
df['id'] = df[['first', 'last']].agg(' '.join, 1).map(maps)
index first last dob id
0 0 peter jones 20000101 9176146523
1 1 john doe 19870105 8292931172
2 2 adam smith 19441212 4108641136
3 3 john doe 19870105 8292931172
4 4 jenny fast 19640822 6385979058
答案 1 :(得分:1)
您可以尝试使用哈希函数。
df['id'] = df[['first', 'last']].sum(axis=1).map(hash)
请注意,哈希ID大于10位,并且是唯一的整数序列。
答案 2 :(得分:0)
您可以在数据框列上应用以下功能。
def generate_id(s):
return abs(hash(s)) % (10 ** 10)
df['id'] = df['first'].apply(generate_id)
如果发现某些值的位数不正确,可以执行以下操作-
def generate_id(s, size):
val = str(abs(hash(s)) % (10 ** size))
if len(val) < size:
diff = size - len(val)
val = str(val) + str(generate_id(s[:diff], diff))
return int(val)