如何在Python Pandas中实现类似SQL WHERE LIKE的结尾匹配并新增列
Pandas 根据SKU后缀新增列的实现方案
需求说明
给Pandas DataFrame新增一列,判断规则如下:
- 当SKU以
-RF结尾时,新列填入"USED" - 当SKU以
-NEW结尾时,新列填入"NEW" - 其余情况不做处理(保持空值)
对应SQL LIKE的Python实现
SQL里的WHERE LIKE '%-RF'是匹配以指定字符串结尾的内容,在Python字符串中,直接用endswith()方法就能实现相同效果,不需要额外通配符语法。
完善你的循环代码片段
你提供的代码里,需要把占位符替换成sku_column.endswith('-RF')和sku_column.endswith('-NEW')——这里用判断语句而非相等判断,因为我们要检查的是字符串结尾,不是完全匹配。完善后的代码如下:
if sku_column.endswith('-RF'): val = "USED" elif sku_column.endswith('-NEW'): val = "NEW" else: continue
如果要放到完整的循环逻辑里处理DataFrame,参考下面的写法:
# 初始化新列 df['condition'] = None # 遍历SKU列赋值 for idx, sku in df['SKU'].items(): if sku.endswith('-RF'): df.loc[idx, 'condition'] = "USED" elif sku.endswith('-NEW'): df.loc[idx, 'condition'] = "NEW" # 其他情况不处理,保持空值
更高效的矢量化写法(推荐)
Pandas里循环效率较低,数据量大时更推荐用矢量化操作,比如结合numpy.where或者字符串方法批量处理:
方法一:嵌套np.where实现多条件判断
import numpy as np df['condition'] = np.where( df['SKU'].str.endswith('-RF'), 'USED', np.where( df['SKU'].str.endswith('-NEW'), 'NEW', None ) )
方法二:正则替换+过滤
# 先替换匹配的后缀为对应值 df['condition'] = df['SKU'].str.replace(r'.*-RF$', 'USED', regex=True) df['condition'] = df['condition'].str.replace(r'.*-NEW$', 'NEW', regex=True) # 把未匹配的项转为空值 df['condition'] = df['condition'].where(df['condition'].isin(['USED', 'NEW']), None)
内容的提问来源于stack exchange,提问作者ijoubert21
相关产品推荐
相关产品推荐

