Pandas DataFrame中按条件拼接两列的最优/最简洁实现方案
Pandas按条件拼接列的最优实现方案
你当前使用iterrows逐行遍历的方式性能较差,针对你的需求可以直接用矢量化运算实现单行代码完成,和R语言中dplyr/data.table的使用体验一致,性能远高于逐行遍历。
方案1:基于numpy.where实现(最常用)
import pandas as pd import numpy as np data = {"Product": ["Shorts", "T-Shirt", "Jacket", "Cap"], "Color": ["Red", "Blue", "White", "Green"], "Size": ["S", "M", None, "S"]} df = pd.DataFrame(data) # 核心单行代码实现需求 df['Output'] = np.where(df['Size'] == 'S', df['Product'] + ' (' + df['Color'] + ')', df['Color']) print(df)
方案2:Pandas原生实现(无需引入numpy)
如果不想额外依赖numpy,可使用pandas自带的mask方法实现:
df['Output'] = df['Color'].mask(df['Size'] == 'S', df['Product'] + ' (' + df['Color'] + ')')
补充说明
- 两种方案均为C层面执行的矢量化运算,数据量过万时性能比
iterrows高百倍以上 - 逻辑完全匹配需求:Size取值为'S'时拼接Product和Color,其余情况(包括Size为None、其他取值)直接返回Color列值
- 如果数据中Product或Color存在非字符串类型,可在对应列后加
.astype(str)做类型转换,避免拼接报错
内容的提问来源于stack exchange,提问作者James Holland
相关产品推荐
相关产品推荐

