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

如何通过向量化方式为DataFrame创建基于其他列的拼接新列?

如何用向量化方式创建基于其他列的新列?

一、通用思路:向量化操作的核心逻辑

咱们在Pandas里创建基于其他列的新列时,一定要优先用向量化方法,而不是逐行迭代。原因很简单:向量化操作是在Pandas底层用优化过的C代码执行的,比Python层面的循环快太多了,数据量越大,差距越明显。

常见的向量化实现思路有这些:

  • 直接对列进行原生运算:比如算术运算、字符串拼接这类简单操作,直接对Series(列)做操作就行
  • 用向量化条件函数:比如np.where()处理多分支逻辑,pd.cut()做分箱操作,都是批量处理,不用逐行判断
  • 复杂场景下可以用pd.Series.transform()或者pd.DataFrame.apply()(不过apply尽量少用,只有当原生方法搞不定的时候再考虑)

二、具体场景:拼接STREET和NR列生成ADDRESS

你提到的逐行循环方法虽然能实现需求,但效率真的不高——iterrows()会把每一行转成Series,遍历起来非常慢。这里给你几个高效的向量化实现方案:

方案1:直接用字符串加法拼接

这是最直观的方式,注意要把数值类型的NR列转成字符串,不然会报错:

df['ADDRESS'] = df['STREET'] + ' ' + df['NR'].astype(str)

方案2:用str.cat()方法更灵活

Pandas的字符串方法str.cat()专门用来拼接字符串列,还能方便处理缺失值:

# 基础拼接
df['ADDRESS'] = df['STREET'].str.cat(df['NR'].astype(str), sep=' ')

# 如果有缺失值,可以指定替换值
df['ADDRESS'] = df['STREET'].str.cat(df['NR'].astype(str), sep=' ', na_rep='Unknown')

方案3:用apply(仅作参考,优先用前两种)

如果是更复杂的拼接逻辑,偶尔可以用apply,但它的效率不如原生向量化方法:

df['ADDRESS'] = df.apply(lambda row: f"{row['STREET']} {row['NR']}", axis=1)

效率对比

举个例子,当你的DataFrame有10万行时,向量化操作的速度大概是iterrows()循环的50-100倍,数据量越大,这个差距会越夸张,所以平时写代码一定要尽量避开逐行迭代~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:16:19