尝试基于某些列为数据帧创建唯一键。使用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
目前没有回答
相关问题 更多 >
编程相关推荐