如何基于Pandas DataFrame前两列生成第三列?
高效生成拼接字符串列的解决方案
首先构建示例DataFrame:
import pandas as pd df = pd.DataFrame({ 'col-a': ['abc', 'def', 'ghi'], 'col-b': [123, 456, 789] # col-b为数值类型,后续需转字符串 })
最优方案:矢量化字符串拼接(速度最快)
针对大数据量场景,矢量化操作是首选,完全规避逐行循环,性能比apply()高数个数量级:
# 直接拼接字符串,将数值型col-b转为字符串后参与拼接 df['col-c'] = 'https://' + df['col-a'] + '.' + df['col-b'].astype(str)
备选方案:正确使用apply()
如果必须使用apply(),需指定axis=1实现逐行处理,同时传入两列值:
df['col-c'] = df.apply(lambda row: f"https://{row['col-a']}.{row['col-b']}", axis=1)
注:该方法仅适合小数据量场景,大数据量下性能远不如矢量化拼接。
基于NumPy的矢量化实现
也可通过NumPy字符串操作函数实现,性能同样优异:
import numpy as np # 将列转为字符串数组 col_a_str = df['col-a'].values col_b_str = df['col-b'].astype(str).values # 分步拼接生成目标列 df['col-c'] = np.char.add(np.char.add('https://', col_a_str), np.char.add('.', col_b_str))
关键提示
- 大数据量禁用
apply():apply()本质是逐行遍历,数据量达十万级以上时速度会显著下降。 - 数值列需转字符串:若
col-b为数值类型,必须通过astype(str)转为字符串后才能参与拼接。
内容的提问来源于stack exchange,提问作者Chinmay Nayak
相关产品推荐
相关产品推荐

