如何用 pandas 实现自定义边界(含右闭区间)的数值分箱
技术百科
碧海醫心
发布时间:2026-01-27
浏览: 次 本文介绍在 pandas 中对数值序列进行非均匀分箱时,如何精确控制最后一个区间的闭合性——特别是让 `[190, 200]` 成为右闭区间(包含 200),突破 `pd.cut` 默认左闭右开限制。
在数据分析中,pd.cut 是最常用的分箱工具,但它默认所有区间均为“左闭右开”(如 [a, b)),即使设置 right=False 也仅将整体改为“左开右闭”(如 (a, b]),无法实现混合区间类型(例如前四段为 [a, b),最后一段为 [c, d])。当业务逻辑要求某特定值(如 200)必须被明确归入某个桶(尤其是作为右端点闭合)时,需结合布尔掩码进行后处理。
以下是一个完整、可复现的解决方案:
import pandas as pd # 构造示例数据:100.0 到 200.3 的等距浮点数(含精确的 200.0) s = pd.Series(range(1000, 2004)).div(10) # 100.0, 100.1, ..., 200.0, 200.1, ... # 定义分箱边界(5 个间隔 → 6 个断点) bins = [100, 135, 160, 175, 190, 200] labels = ['[100, 135)', '[135, 160)','[160, 175)', '[175, 190)', '[190, 200]'] # 第一步:用 pd.cut(left-closed, right-open)完成主体分箱 cut_result = pd.cut(s, bins=bins, labels=labels, right=False) # 第二步:识别值恰好等于 200 的位置,并强制赋值为 '[190, 200]' mask_200 = s == 200.0 out = cut_result.mask(mask_200, '[190, 200]') print(out.iloc[998:1003]) # 查看关键位置(含 199.9, 200.0, 200.1)
输出片段:
998 [190, 200] 999 [190, 200] 1000 [190, 200] # ← 精确匹配 200.0,已正确归入闭区间 1001 NaN # ← 超出最大边界,保持 NaN(合理) 1002 NaN
✅ 关键要点说明:
- bins 必须严格递增,且长度比 labels 多 1;
- right=False 确保前四段为 [a, b) 形式;
- 使用 .mask(condition, value) 是安全覆盖的推荐方式(比 .loc[condition] = value 更健壮,尤其对 category 类型);
- 对于超出 bins 范围的值(如 200.1),pd.cut 默认返回 NaN,符合预期,无需额外处理;
- 若需将 200.0 映射为整数标签(如 4)而非字符串区间,可先用 pd.cut(..., retbins=False) 得到 codes,再单独修正 codes[s==200] = 4。
该方法简洁、高效、可扩展——若未来还需支持其他特殊点(如 100.0 强制归入首区间),只需增加对应布尔条件即可。
# 是一个
# 数据分析
# 尤其是
# 但它
# 只需
# 均为
# 而非
# 先用
# 工具
# go
# 字符串
# 中对
# 布尔
# 四段
# pandas
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win11怎么关闭触摸屏_禁用Win11笔记本触摸
- Windows如何拦截2345弹窗广告_Windo
- c++怎么实现大文件的分块读写_c++ 文件指针s
- C++如何使用std::async进行异步编程?(
- c++ unordered_map怎么用 c++哈
- VSC怎样在Linux运行PHP_Ubuntu系统
- Windows电脑如何进入安全模式?(多种按键方法
- PHP主流架构怎么处理表单验证_规则与自定义【技巧
- Windows10系统怎么查看防火墙状态_Win1
- Win11键盘快捷键大全_Windows 11常用
- Win11怎么设置系统还原_Windows11系统
- 如何使用Golang理解结构体指针方法接收者_Go
- Windows10如何删除恢复分区_Win10 D
- Win11怎么设置指纹解锁 Win11笔记本录入指
- Windows系统被恶意软件破坏后的恢复策略_错误
- Win11怎么设置默认浏览器Chrome_Wind
- Laravel 查询 JSON 列:高效筛选包含数
- Windows电脑键盘突然失灵怎么办?(驱动与硬件
- Windows音频驱动无声音原因解析_声卡驱动错误
- Linux如何申请SSL免费证书_Linux下Ce
- c++ atoi和atof函数用法_c++字符数组
- 如何使用Golang实现错误包装与传递_Golan
- c++的位运算怎么用 与、或、异或、移位操作详解【
- Windows11如何设置专注助手_Windows
- LINUX如何开放防火墙端口_Linux fire
- Go 中实现 Python urllib.quot
- Windows11怎么自定义任务栏_Windows
- 如何自定义Windows终端的默认配置文件?(Po
- Windows家庭版如何开启组策略(gpedit.
- Win10如何更改开机密码_Windows10登录
- c++中的std::conjunction和std
- Win11怎么修改DNS服务器 Win11设置DN
- Win10怎样卸载TeamViewer_Win10
- 如何在 PHP 单元测试中正确模拟带方法的图像处理
- PHP 中 require() 语句返回值的用法详
- php485函数执行慢怎么优化_php485性能提
- Win11怎么设置快速访问主页_Windows11
- Win11任务栏怎么固定应用 Win11将软件图标
- php会话怎么开启_session_start函数
- 如何高效获取循环末次生成的 NumPy 数组最后一
- Win11怎么调整屏幕亮度_Windows 11调
- Win11怎么更改管理员名字 Win11修改账户名
- Mac系统更新下载慢或失败怎么办_解决macOS升
- windows 10专注助手怎么关闭_window
- Win11怎么设置应用分屏_Windows11贴靠
- php与c语言在嵌入式中有何区别_对比两者在硬件控
- windows如何测试网速_windows系统网络
- Win10怎么关闭自动更新错误重启 Win10策略
- c++中如何使用虚函数实现多态_c++多态性实现原
- Win11开机Logo怎么换_Win11自定义启动


QQ客服