微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python校验和或哈希在每次执行时都需要相同的输出

如何解决python校验和或哈希在每次执行时都需要相同的输出

尝试根据某些列为数据框创建唯一键。使用hashlib和zlib时,对于数据帧中相同的记录,每次执行新的python程序时都生成不同的值。

寻找一种创建唯一校验和的方法,对于数据帧中的给定数据记录,校验和应该相同。列很多,所以不想使用串联列作为键。任何见解将不胜感激。使用下面的hashlib和zlib测试的示例代码

Hashlib

    stg_matchdf["Unique travelid"] = pd.DataFrame(stg_matchdf[uniquecols_list].astype(str).values.sum(axis=1))[0].\
str.encode('utf-8').apply(lambda x: (hashlib.sha512(x).hexdigest().upper()))

zlib.adler32

stg_matchdf["Unique travelid"] = pd.DataFrame(stg_matchdf[uniquecols_list].astype(str).values.sum(axis=1))[0].\
    str.encode('utf-8').apply(lambda x: (zlib.adler32(x) & 0xffffffff  ))

已编辑(10/21)。更改了代码并遇到了新问题。请查阅。抱歉造成任何混乱

以上代码段均存在问题。对于一行,由于pd.DataFrame()更改了原始df行的顺序,因此在“ Unique travelid”列中添加了其他行的列值哈希。下面的修改后的代码获取给定行的相应列值,但遇到了下面说明的新问题

修改后的代码

stg_matchdf["Unique travelid_Sum"] = stg_matchdf[uniquecols_list].astype(str).values.sum(axis=1)
stg_matchdf["Unique travelid_Key"] = stg_matchdf["Unique travelid_Sum"].apply(lambda x: (zlib.adler32(str(x).encode('utf-8')) & 0xffffffff))

stg_matchdf [uniquecols_list] .astype(str).values.sum(axis = 1)在多个运行中未按特定顺序连接列。请参见下面的示例进行两次运行。整个长度相同,但是串联顺序是随机的。因此,这导致hashlib或zlib每次都返回不同的值。有什么办法可以指定上面代码中的列顺序?

Run1:
AHKGCANADACANADAnorTH AMERICA266430RDirect WDAYYZINTERNATIONALMANULIFE - CANADA TRANSIENTFeb-2020HONG KONGASIA/PACIFICPARTIAL refund2020-02-15Canada266430.02020-02-02Hong Kong2020-03-01QVKGS6

Run2:
YYZCANADAPARTIAL refund2664302020-02-02AMANULIFE - CANADA TRANSIENTHONG KONGnorTH AMERICA2020-03-01Hong KongQVKGS6INTERNATIONALDirect WDRHKGACanadaFeb-2020266430.02020-02-15CANADAASIA/PACIFIC

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。