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

Python中无需罗列分箱值、不使用np.digitize的分箱实现方法

分箱需求实现方案

你可以根据分箱的生成规则和技术栈需求选以下两种方案:

按规则生成分箱边界,避免逐个手写

你给出的分箱步长是可枚举的,直接通过步长累加生成边界即可,不用把所有边界值挨个写死在代码里:

start = 4100000
# 只需要定义每两个相邻边界的差,不用写完整边界值
step_list = [55304, 55304, 110608, 221216, 442433, 342668, 342668, 76016, 126892, 126891]
bins = [start]
for step in step_list:
    bins.append(bins[-1] + step)

如果你的分箱本身是等距、等频、指数分箱这类通用规则,还可以直接用对应API生成边界,连步长都不用手动定义。

不使用np.digitize的分箱实现

方案1:用pandas的cut方法(适合处理批量数组)

返回的索引和np.digitize结果完全一致:

import pandas as pd
# include_lowest=True保证左闭右开的区间逻辑和np.digitize默认逻辑对齐,加1是因为cut默认从0开始编号
bin_indices = pd.cut(bins_array, bins=bins, labels=False, include_lowest=True) + 1

方案2:纯Python实现(无numpy/pandas依赖)

用内置bisect模块就能实现,性能也足够应对大部分场景:

import bisect
# 单个值分箱
def get_bin(x):
    return bisect.bisect_right(bins, x)
# 批量处理数组
bin_indices = [get_bin(x) for x in bins_array]

内容的提问来源于stack exchange,提问作者Preston B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 07:51:03