gpt4 book ai didi

python - 计算数据框列值的汉明距离

转载 作者:行者123 更新时间:2023-12-05 04:26:06 25 4
gpt4 key购买 nike

我想创建一个新的数据帧,它是现有数据帧中特定列值之间所有汉明距离的距离矩阵。汉明距离似乎工作正常:

def hamming_dist(str1, str2):
hamming = 0
for letter in range(len(str1)):
if str1[letter] != str2[letter]:
hamming += 1
return hamming

hamming_dist("hello", "heLLo")

输出

2

我想为名为“蛋白质”的库中名为 hamming_df 的 df 中的所有值计算汉明。

hamming_distance_df = pd.DataFrame(hamming_dist(hamming_df["protein"], hamming_df["protein"]))\
(index = hamming_df["protein"], columns=hamming_df["protein"])

输出是具有正确索引和列的数据帧,但所有值都是 0 而不是实际的汉明距离。有什么想法吗?

谢谢

最佳答案

问题是您将 pandas Series 传递给 hamming_dist 而不是字符串。一种解决方案是使用 itertools.product生成字符串对:

import pandas as pd
from itertools import product


def hamming_dist(str1, str2):
hamming = 0
for letter in range(len(str1)):
if str1[letter] != str2[letter]:
hamming += 1
return hamming


hamming_df = pd.DataFrame(["hello", "yello"], columns=["protein"])

res = pd.DataFrame([hamming_dist(*p) for p in product(hamming_df["protein"], repeat=2)], columns=["hamming_protein"])
print(res)

输出

  hamming_protein
0 0
1 1
2 1
3 0

另一种方法是使用 scipy.spatial.pdist计算距离:

from scipy.spatial.distance import pdist, squareform

hamming_df = pd.DataFrame(["hello", "yello"], columns=["protein"])
arr = squareform(pdist(hamming_df["protein"].to_numpy().reshape((-1, 1)), metric=hamming_dist)).flatten()
res = pd.DataFrame(arr, columns=["hamming_protein"])
print(res)

输出

   hamming_protein
0 0.0
1 1.0
2 1.0
3 0.0

注意

我建议您使用以下适用于不同长度字符串的 hamming_dist 函数:

def hamming_dist(str1, str2):
return sum(l1 != l2 for l1, l2 in zip(str1, str2)) + abs(len(str1) - len(str2))

更新

如果输出是一个距离矩阵,我建议你使用pdist如下:

from scipy.spatial.distance import pdist, squareform

hamming_df = pd.DataFrame(["hello", "yello"], columns=["protein"])
arr = squareform(pdist(hamming_df["protein"].to_numpy().reshape((-1, 1)), metric=hamming_dist))
res = pd.DataFrame(arr, columns=hamming_df["protein"], index=hamming_df["protein"])
print(res)

输出

protein  hello  yello
protein
hello 0.0 1.0
yello 1.0 0.0

关于python - 计算数据框列值的汉明距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73105314/

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