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

Python中如何基于两列测试值为患者数据匹配最近的预定义Mood类别

分类打标实现方案

核心逻辑是基于A、B两个维度的欧氏距离匹配最近的Mood基准,1万行患者数据的量级下,普通运算即可快速完成,不需要额外复杂优化。

依赖库

  • pandas:DataFrame数据处理
  • numpy:数值计算
  • 可选:scikit-learn(用于超大数据量下的快速近邻查询)

完整代码实现

首先导入依赖:

import pandas as pd
import numpy as np

假设你的患者数据存储在df_patient,Mood基准数据存储在df_mood,执行匹配逻辑:

# 提取Mood基准的特征和标签数据
mood_features = df_mood[["A", "B"]].values
mood_labels = df_mood["Mood"].values

# 定义匹配函数:输入患者行数据,返回最近的Mood标签
def get_closest_mood(patient_row):
    # 计算当前患者和所有Mood基准的欧氏距离,省略开平方也不影响距离大小比较
    dists = np.sum((mood_features - [patient_row["A"], patient_row["B"]]) ** 2, axis=1)
    # 返回距离最小对应的Mood
    return mood_labels[np.argmin(dists)]

# 为所有患者匹配Mood,生成新列
df_patient["matched_mood"] = df_patient.apply(get_closest_mood, axis=1)

可选优化方案(适合十万级以上数据量)

如果后续患者数据量级大幅提升,可以用KDTree实现更快的近邻查询:

from sklearn.neighbors import KDTree

# 基于Mood基准特征构建KD树
kdtree = KDTree(mood_features)
# 批量查询所有患者的最近邻,返回对应索引
_, min_idx = kdtree.query(df_patient[["A", "B"]].values, k=1)
# 批量赋值匹配结果
df_patient["matched_mood"] = mood_labels[min_idx.flatten()]

示例运行结果

针对你给出的测试数据,最终匹配结果如下:

patient idABmatched_mood
EHR1234560.4150.230Type D
EHR9876530.8540.705Type G
EHR6574830.3640.881Type A

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:54:03