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

如何将pandas DataFrame剔除id列的所有行传入get_similar_row函数的rows参数?

自动从DataFrame传入函数的实现方案

核心操作逻辑

  • 按照规则跳过id列:从DataFrame中剔除id列,将剩余所有特征的行转为二维数组格式,直接作为函数的rows入参传入,完全不需要手动拼接数值。
  • 目标行的提取:从DataFrame中筛选出对应目标id的行,同样剔除id列后转为一维数组,作为函数的target入参传入。
  • 索引匹配规则:原函数返回的是传入rows数组的位置索引,该索引和剔除id列后的DataFrame行号完全对应,可直接回溯原DataFrame的完整行信息。

完整可运行代码

import numpy as np
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity

# 原相似度计算函数
def get_similar_row(rows, target):
    """Return the index of the most similar row"""
    return np.argmax(cosine_similarity(rows, [target]))

# 示例DataFrame
df = pd.DataFrame({
    'id': [1191, 3251, 1641, 2133],
    'size': [3, 2, 1, 3],
    'numberOfPlants': [0, 1, 1, 0],
    'balcony': [1, 0, 1, 0],
    'available': [1, 0, 0, 1],
    'publicTransport': [1, 0, 0, 1]
})

# 构造rows入参:跳过id列,取所有行的特征值
rows_input = df.drop(columns=['id']).values

# 构造target入参:对应目标行(id=2133)的特征值,跳过id列
target = df[df['id'] == 2133].drop(columns=['id']).iloc[0].values

# 调用函数获取最相似行的位置索引
similar_row_pos = get_similar_row(rows_input, target)

# 可直接通过索引获取最相似行的完整信息
similar_row = df.iloc[similar_row_pos]

注意事项

之前手动传入参数时,把id这类大数值标识纳入特征计算,会因为id的数值量级远大于其他0/1编码的业务特征,严重干扰余弦相似度的判断,跳过id列的计算结果才符合业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 05:54:09