gpt4 book ai didi

python - 如何基于数据帧中两个变量的组合创建散列算法?

转载 作者:行者123 更新时间:2023-12-04 03:59:38 25 4
gpt4 key购买 nike

我是 Python 新手,正在研究散列算法。
我有一个数据框-

df2
Out[55]:
CID SID
0 2094825 141
1 2327668 583
2 2259956 155
3 1985370 100
4 2417177 47
... ...
1030748 2262027 100
1030749 2232061 100
1030750 2027795 169
1030751 2474609 100
1030752 2335654 169

[1030753 rows x 2 columns]
我如何使用 hashlib python 库来获取散列算法,以便 CID 和 STD 的每个组合都给我一个独特的加密,例如 CID 2262027 和 SID 100 是 fj6x55,而 CID 2232061 和 SID 100 给出了 f6223xi 等的另一个独特加密。只要组合是独一无二的。我想要独特的加密。如果他们重复,那么加密应该是相同的。我愿意接受其他建议,比如一种热编码,以防 hashlib 不起作用。到目前为止,我收到一个错误 -
import hashlib
x = hashlib.md5(df2['SID'])
Traceback (most recent call last):

File "<ipython-input-60-44772f235990>", line 1, in <module>
x = hashlib.md5(df2['SubDiagnosisId'])

TypeError: object supporting the buffer API required

最佳答案

这是我对此的尝试:hashes = df2.apply(lambda x:hashlib.md5((str(x[0])+str(x[1])).encode('utf8')).hexdigest(), axis=1)一些解释:df2.apply 接受一个函数,在本例中为匿名 lambda 函数,以及我们想要应用该函数的轴。在这种情况下,axis=1 适用于每一行。
散列函数分解:
匿名函数采用一个参数 x ,它由两列组成。我们将 x 分解为 x[0](第一列 CID)和 x[1](第二列 SID)。
在这里,我们有两个选择。我们可以将整数转换为字符串并像我在这里所做的那样连接字符串,或者将 CID 值乘以某个至少为 max(SID) 的常量。但是,我认为对于这种情况,字符串连接可能不够独特。更好的方法可能如下:df.apply(lambda x:hashlib.md5(str(x[0]*1024+x[1]).encode('utf8')).hexdigest(), axis=1)您注意到最大 SID 值为 583,因此我选择了下一个可用的 2 次幂作为乘数。这有效地将所有 CID 值左移 10 位,以便所有 10 个 LSB 位现在为零。然后我们使用加法用 SID 值填充这些 LSB 位。
无论哪种方式,最终表示都需要是一个编码的字节字符串,因此是 str(integer_stuff).encode('utf8') 部分。最后,我们将该结果包含在 hashlib.md5() 中并调用 .hexdigest() 来检索哈希的十六进制字符串表示。
就 Pandas 本身而言,对我的方法进行改进是受欢迎的 :) 但我认为我的散列方法本身非常合理。
编辑:
为了将结果连接到原始 DataFrame,请尝试以下操作:

# Calculate the hashes. This gives you a Series.
hashes = df2.apply(lambda x:hashlib.md5((str(x[0])+str(x[1])).encode('utf8')).hexdigest(), axis=1)
# Create a DataFrame from the above Series
df_hash = pd.DataFrame(hashes, columns=['hash'])
# Join the hashes with the original DataFrame
df2 = df2.join(df_hash)
用一组简短的数据进行了测试,所以它也应该适合你:)

关于python - 如何基于数据帧中两个变量的组合创建散列算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63256534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com