如何用 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; ?>
】
相关推荐
- Go 语言标准库为何不提供泛型 Contains
- Win11怎么更改计算机名_Windows11系统
- 如何在Golang中处理JSON字段缺失_Gola
- php修改数据怎么改富文本_update更新htm
- 如何在Golang中使用time处理时间_Gola
- php打包exe怎么传递参数_命令行参数接收方法【
- php怎么下载安装后无法解析php文件_服务器配置
- php本地部署支持nodejs吗_php与node
- PythonFastAPI项目实战教程_API接口
- PyTorch DDP 多进程训练在 Kaggle
- 如何用::实现工具类方法调用_php静态工具类设计
- 如何使用Golang实现容器自动化运维_Golan
- Win11怎么退出微软账户_切换Win11为本地账
- Win11怎么关闭自动调节亮度_Windows11
- windows系统找不到无线网络怎么办_windo
- Win11如何更改任务栏颜色 Win11自定义任务
- Mac的“预览”如何合并多个PDF_Mac文件处理
- Win11怎么设置指纹解锁 Win11笔记本录入指
- 如何使用正则表达式批量替换重复的 *- 模式为固定
- Windows 11无法安全删除U盘提示设备正在使
- c++怎么操作redis数据库_c++ hired
- php怎么下载安装后测试是否成功_简单脚本验证方法
- Python安全爬虫设计_IP代理池与验证码识别策
- Mac如何备份到iCloud_Mac桌面与文稿文件
- 如何在Golang中写入JSON文件_保存结构体数
- 如何在Golang中处理模块包路径变化_Golan
- Win11怎么关闭应用权限_Windows11相机
- Windows10蓝屏SYSTEM_SERVICE
- VSC怎么快速定位PHP错误行_错误追踪设置法【方
- Win11怎么格式化U盘_Win11系统U盘格式化
- Win11怎么关闭系统声音_Win11系统提示音静
- php删除数据怎么软删除_添加is_del字段标记
- 如何在 Go 中可靠地测试含 time.Time
- Windows笔记本无法进入睡眠模式怎么办?(电源
- 如何使用Golang table-driven f
- Win11截图快捷键是什么_Win11自带截图工具
- Laravel 查询 JSON 列:高效筛选包含数
- mac怎么右键_MAC鼠标右键设置与触控板手势技巧
- Python正则表达式实战_模式匹配说明【教程】
- Linux如何安装Golang环境_Linux下G
- Mac如何设置动态壁纸?(让桌面动起来)
- Python对象生命周期管理_创建销毁解析【教程】
- mac怎么看硬盘大小_MAC查看磁盘存储空间与文件
- 如何在Golang中编写异步函数测试_Golang
- php内存溢出怎么排查_php内存限制调试与优化方
- Win11怎么开启移动热点_Windows11共享
- c++如何获取map中所有的键_C++遍历键值对提
- 如何提升Golang JSON序列化性能_Gola
- 如何在Golang中实现文件下载_Golang文件
- Win11怎么开启上帝模式_创建Windows 1


QQ客服