You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas计算DataFrame各行相对指定参考行距离并新增列

报错原因

sklearn.metrics.pairwise_distances 的输入参数必须为二维数组,格式要求是(样本数量, 特征维度),你直接传入了两个一维的单列数组,不符合接口输入要求,因此触发维度报错。
除此之外你的原有逻辑也存在偏差:需求是计算所有样本点到y_train取值为0的参考点的单点距离,不是所有样本两两之间的距离,不需要传入两个独立的特征列做全量两两计算。

正确实现方法

你可以选以下任意一种方案实现:

  • 方案1:使用pairwise_distances的正确传参写法
from sklearn.metrics import pairwise_distances

# 提取参考点:取y_train=0对应行的feat1、feat2坐标,转为符合接口要求的2D数组
ref_point = df_centroid.loc[df_centroid['y_train'] == 0, ['feat1', 'feat2']].values.reshape(1, -1)
# 提取所有待计算样本的坐标,结构为(总样本数, 2)的2D数组
all_points = df_centroid[['feat1', 'feat2']].values
# 计算所有点到参考点的距离,展平为一维数组后赋值给新列
df_centroid['distance from Class 0'] = pairwise_distances(all_points, ref_point).flatten()
  • 方案2:直接按欧氏距离公式计算,无需依赖sklearn,更轻量不会出现维度报错
# 先拿到参考点的x、y坐标
ref_feat1, ref_feat2 = df_centroid.loc[df_centroid['y_train'] == 0, ['feat1', 'feat2']].iloc[0]
# 按二维欧氏距离公式逐行计算:距离 = 根号下( (x坐标差)^2 + (y坐标差)^2 )
df_centroid['distance from Class 0'] = (
    (df_centroid['feat1'] - ref_feat1) ** 2 
    + (df_centroid['feat2'] - ref_feat2) ** 2
) ** 0.5

注意:如果你的数据集里y_train=0对应多条样本,可以先计算类0所有样本的feat1、feat2均值作为类中心参考点,替换上述代码中的参考点取值即可。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:27:14