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

如何对Pandas DataFrame的不同行批量应用对应模型完成一次性预测?

如何对Pandas DataFrame的不同行批量应用对应模型完成一次性预测?

嘿,我完全懂你不想拆分数据集分别预测的诉求,这里有两种简洁的「一步到位」方法,能直接根据model_version列匹配对应模型完成预测,不用手动拆分再合并:

方法一:用apply结合模型映射字典

首先我们把模型和对应的版本名做成一个映射字典,然后通过apply逐行调用对应模型预测:

# 先创建模型与版本的映射字典
model_map = {'model_a': model_a, 'model_b': model_b}

# 定义特征列(排除id和model_version)
feature_cols = df.columns.difference(['id', 'model_version'])

# 一次性生成预测结果
df['predictions'] = df.apply(
    lambda row: model_map[row['model_version']].predict(
        row[feature_cols].values.reshape(1, -1)
    )[0],  # 取单样本预测结果的第一个元素
    axis=1
)

解释:

  • 映射字典model_map帮我们快速根据model_version的值找到对应的模型
  • row[feature_cols].values.reshape(1, -1)是把单行特征转成模型predict方法需要的二维数组格式
  • apply会自动遍历每一行,把预测结果直接赋值给新的predictions列,全程不用拆分DataFrame

方法二:用groupby+transform批量处理

如果你的同版本数据量比较大,分组处理会更高效,transform会自动把分组预测的结果对齐回原DataFrame:

model_map = {'model_a': model_a, 'model_b': model_b}
feature_cols = df.columns.difference(['id', 'model_version'])

df['predictions'] = df.groupby('model_version').transform(
    lambda group: model_map[group.name].predict(group[feature_cols])
)

解释:

  • 按model_version分组后,每个组的group.name就是对应的版本名,直接从字典里取模型
  • 对整个组批量预测,比逐行apply效率更高(尤其是数据量大的时候)
  • transform会自动将分组预测的结果按原DataFrame的索引位置填充,完美对齐原数据

这两种方法都完全符合你要的「one-go」需求,不用拆分数据集,一步就能生成所有预测结果~

备注:内容来源于stack exchange,提问作者quant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 10:48:03