2016-03-09 48 views

回答

3

如果'employee_id'+'customer_id'+'timestamp'很长,并且您对某些不太可能有碰撞感兴趣,则可以用散列替换它。散列的范围和质量将决定冲突的概率。也许最简单的是使用builtin hash。假设你的数据帧是df,列是字符串,这是

(df.employee_id + df.customer_id + df.timestamp).apply(hash) 

如果你想要的大小和碰撞概率的更多控制,请this piece on non-crypotgraphic hash functions in Python


编辑

大厦an answer to this question,你可以建立10个字符的哈希值是这样的:

import hashlib 
df['survey_id'] = (df.employee_id + df.customer_id + df.timestamp).apply(
    lambda s: hashlib.md5(s).digest().encode('base64')[: 10]) 
+0

这是非常简单的。如果我想试试这个库,有没有办法去应用一些hashlib选项? –

+1

@LanceDacey当然,你可以用很多方式来做,包括lambda函数。如果您有一些示例问题,请在此处留言。 –

+0

谢谢,我是加密新手,但我知道我已经看到一些使用A-Z,a-z,例如0-9的哈希。我的目标是将这三列合并到一个新的临时列中,然后将其散列到survey_id列中。如果我们可以让id列成为一个更短的字符串,那就更好了(合并列很长,就像我的ldacey201603081114239999999999)。 因此df ['survey_id'] = df ['combined']上的一些hashlib函数] –