两行之间的欧氏距离

Euclidian distance between two rows

我有一些通过 API 获得的对象。 该对象由几个布尔字段组成。

我正在努力计算我的数据框 (df_survey) 和我从 API 获得的每个对象之间的欧几里得距离(df 是包含所有对象的数据框,df_first -第一个)

df_survey = pd.DataFrame([["True", "True", "False", "True", "True"]], columns=columns, index=["survey"])
similarities = np.zeros((data["count"], 1))

dataset = pd.json_normalize(data["results"])
df = pd.DataFrame(dataset, columns=columns, index=dataset.id-1)
df_first = pd.DataFrame(dataset.head(1), columns=columns, index=[0])

euclidean = scipy.spatial.distance.cdist(df_survey, df_first, metric='euclidean')
distance = pd.DataFrame(euclidean, columns=df_survey.index.values, index=df_first.index.values)

在这个解决方案中我得到一个错误:ValueError: Unsupported dtype object

我也尝试使用 scipy.spatial.distance.euclidean 但它需要整数值,而不是布尔值或 str,也许我可以将每个值更改为 int 但我不知道是否有更好的解决方案。

提前致谢!

您将布尔值声明为字符串而不是实际的布尔值,因为您正在做 ["True","False"]。您应该将它们声明为不带引号的 [True, False]。在 pandas 中,字符串类型被解释为通用对象类型。这就是您看到此错误的原因。

我建议您修复此问题并尝试重新计算距离。如果它不起作用,只需将它们转换为 0 和 1。