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

如何将模型预测数组追加到DataFrame最后一列?选for循环还是zip函数?

问题:如何将逻辑回归预测结果合并到目标DataFrame?

场景还原

  • 逻辑回归模型的5条样本预测输出:
In[] logireg.predict(X.head(5))
Out[] array([0, 0, 0, 1, 0], dtype=int64)
  • 原始的DataFrame数据:
agejobmonth
33blueapr
56adminjun
37techaug
76retiredjun
56servicemay
  • 想要得到的最终结果:
agejobmonthpredict
33blueapr0
56adminjun0
37techaug0
76retiredjun1
56servicemay0

提问:实现这个需求,应该用for循环还是zip函数?


解答

其实两种方式都能实现,但zip函数的写法会更简洁高效,也更符合Pythonic风格,不过我得先告诉你:还有个更简单的方法——完全不用循环或zip,直接赋值就行!下面给你逐一说明:

1. 最推荐:直接给DataFrame新增列赋值

因为你的预测结果数组长度和DataFrame的行数完全匹配,直接给原DataFrame新增一列赋值是最省心高效的操作,一行代码搞定:

predictions = logireg.predict(X.head(5))
df['predict'] = predictions

这也是pandas处理这类场景的标准操作,没必要绕弯子用循环。

2. 用zip函数的实现方式

如果是出于学习目的想尝试zip,有两种写法:

写法一:用zip拼接数据后转成新DataFrame

predictions = logireg.predict(X.head(5))
# 把原DataFrame的列和预测结果用zip打包成元组列表
combined_data = list(zip(df['age'], df['job'], df['month'], predictions))
# 转成新的DataFrame并指定列名
new_df = pd.DataFrame(combined_data, columns=['age', 'job', 'month', 'predict'])

写法二:用zip配合列表推导式给原df加列

predictions = logireg.predict(X.head(5))
df['predict'] = [pred for _, _, _, pred in zip(df['age'], df['job'], df['month'], predictions)]

这种写法比手动for循环紧凑,也不用操心索引匹配的问题。

3. 用for循环的实现方式

用for循环的话需要手动遍历索引,把每个预测值对应到行,写法繁琐还容易出错(比如索引不连续的时候就会出问题):

predictions = logireg.predict(X.head(5))
# 先初始化新列
df['predict'] = 0
# 遍历索引赋值
for idx in range(len(df)):
    df.loc[idx, 'predict'] = predictions[idx]

除非有特殊场景需要逐行处理,否则不推荐这种方式。

总结:优先用直接赋值的方法,其次考虑zip,尽量避免手动for循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:38:54