如何基于多条件创建新列?使用case when不生效该如何解决?
解决方案
首先排查以下几个常见的CASE WHEN失效原因,再对照你截图的分段规则调整代码:
- 注意区间判断的顺序,要从最严格的小范围到宽松的大范围书写,避免先命中宽松条件导致后续判断不生效
- 确认判断字段的类型为数值型,如果是字符型需要先转成数值再判断,避免字符串比较出现逻辑错误(比如字符场景下
'99' > '100'的判断结果为真,会导致规则完全错乱) - 语法结构不要缺漏
END关键字,size别名要正确写在END后面 - 数值型字段判断不要加多余的引号,字符型字段判断要注意大小写、首尾空格的匹配问题
标准SQL实现示例(假设用于判断的数值字段为volume,你可以替换成你实际的字段名和区间阈值):
SELECT *, CASE WHEN volume < 100 THEN 'S' WHEN volume >= 100 AND volume < 500 THEN 'M' WHEN volume >= 500 THEN 'L' -- 兜底规则,避免未匹配到规则时出现空值 ELSE 'Unspecified' END AS size FROM 你的表名;
如果你是在pandas中生成新列,推荐两种实现方式:
# 方法1:自定义函数+apply实现,可读性更高 def get_size(volume): if volume < 100: return 'S' elif 100 <= volume < 500: return 'M' elif volume >= 500: return 'L' else: return 'Unspecified' df['size'] = df['volume'].apply(get_size) # 方法2:用pd.cut实现,大数据量下性能更优 import pandas as pd df['size'] = pd.cut( df['volume'], bins=[-float('inf'), 100, 500, float('inf')], labels=['S', 'M', 'L'] )
内容的提问来源于stack exchange,提问作者Ahmed Serwah
相关产品推荐
相关产品推荐

