基于DataFrame某列条件子串创建新列时numpy select返回全零原因咨询
问题原因
你编写的numpy select方案返回全0值,核心原因是条件构造不符合要求:
pandas中直接使用'KNC-' in df['Tracking Code']这类语法时,不会逐行判断列中每个元素是否包含对应子串,仅会判断该字符串是否为列中的独立元素,最终返回的是单个布尔值,而非np.select要求的、和DataFrame行数长度一致的逐行布尔序列。当所有条件都不满足时,np.select默认返回0,因此你得到了全0的结果。
修正后的numpy select实现
如需实现和你现有可行方案一致的逻辑(忽略大小写、未匹配返回空字符串),可调整代码如下:
import numpy as np conditions = [ df['Tracking Code'].str.contains('KNC-', case=False, na=False), df['Tracking Code'].str.contains('SL-', case=False, na=False), df['Tracking Code'].str.contains('SNP-', case=False, na=False), df['Tracking Code'].str.contains('EMC-', case=False, na=False) ] values = ['Paid Search', 'Display', 'Social', 'Email'] # default参数指定未匹配时的返回值,和你原有逻辑对齐 df['Marketing Channel'] = np.select(conditions, values, default='')
补充说明:str.contains的na=False参数用于处理列中的空值场景,避免空值返回NaN导致条件判断出错。
内容的提问来源于stack exchange,提问作者user16996079
相关产品推荐
相关产品推荐

