You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何实现SQL的case when语句效果完成pandas数据分箱?

pandas实现SQL case when分箱逻辑的解决方案
  • 方案1:直接扩展原有lambda三元表达式(改动最小)
    你可以直接在原有lambda的else分支中嵌套新的三元判断,适配多分支逻辑:
df['company_size'] = df['site_visits'].apply(lambda x: 'Small' if x < 300 else 'Medium' if x < 600 else 'Large')

该方法适合分支较少的场景,无需引入其他依赖,直接修改原有代码即可生效。

  • 方案2:使用np.where嵌套(逻辑和SQL完全对齐)
    对于有SQL使用背景的用户,np.where嵌套的逻辑和case when完全一致,写法相似度很高:
import numpy as np
df['company_size'] = np.where(
    df['site_visits'] < 300, 'Small',
    np.where(df['site_visits'] < 600, 'Medium', 'Large')
)

执行效率远高于apply方法,逻辑清晰容易排查问题。

  • 方案3:使用pd.cut(区间分箱场景最优解)
    你的需求属于典型的连续值区间分箱场景,使用pandas内置的分箱函数pd.cut是性能最高、代码最简洁的实现方式:
df['company_size'] = pd.cut(
    x=df['site_visits'],
    bins=[-1, 299, 599, 1000], # 适配默认左开右闭规则,包含0和1000两个边界值
    labels=['Small', 'Medium', 'Large']
)

如果需要调整区间开闭规则,可以添加right=False参数修改为左闭右开,对应调整bins参数即可。

  • 方案4:使用pandas原生case_when(pandas 1.3.0+版本支持)
    pandas后续版本新增了原生case_when方法,语法和SQL的case when几乎完全一致,可读性最高,多分支场景下易维护:
df['company_size'] = df['site_visits'].case_when(
    [
        (df['site_visits'] < 300, "Small"),
        (df['site_visits'].between(300, 599), "Medium"),
        (df['site_visits'] >= 600, "Large")
    ]
)

内容的提问来源于stack exchange,提问作者Zack Tobin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:45:02