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

python校验和或哈希每次执行都需要相同的输出,python,zlib,checksum,hashlib,Python,Zlib,Checksum,Hashlib,尝试基于某些列为数据帧创建唯一键。使用hashlib和zlib,它们都为dataframe中相同记录的每个新python程序执行生成不同的值 正在寻找一种创建唯一校验和的方法,对于dataframe中的给定数据记录,它应该是相同的。有许多列,所以不希望将连接的列用作键。任何见解都将不胜感激。下面使用hashlib和zlib测试的示例代码 Hashlib stg_matchdf["Unique travelid"] = pd.DataFrame(stg_matchdf[

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

正在寻找一种创建唯一校验和的方法,对于dataframe中的给定数据记录,它应该是相同的。有许多列,所以不希望将连接的列用作键。任何见解都将不胜感激。下面使用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

如果数据每次都相同,那么这两种方法每次都应该计算相同的结果。-这就是他们的全部观点,真的。我要说的是,尽你所能确保数据本身不会改变,数据从哪里来?只是一个文件,还是来自网络或类似的东西?谢谢@Steve。数据正在变化。我编辑了这个问题,对代码做了一些调整。遇到新问题导致每次数据都不同。stg_matchdf[uniquecols_list].astype(str).values.sum(axis=1)连接列,但每次列的顺序不同。不知道这里是否有指定列顺序的方法。问题中给出的样本问题已解决。这是由于从一个集合创建的uniquecols_列表。所以,由于集合是无序的,每次运行都会返回不同顺序的列,以馈送到上面的散列或zlib代码,从而导致每次输出散列都不同