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

Python中为按age排序的DataFrame基于y_hat值变化分箱的实现方法

Pandas 按相邻行y_hat值变化分配分箱编号实现方案

你可以通过shift()和cumsum()的组合逻辑实现需求,代码简洁执行效率高,不需要额外自定义循环:

完整可运行代码

import pandas as pd

# 构造示例测试数据
df = pd.DataFrame({
    'age': [1, 1, 2, 3, 3, 3, 3],
    'y_hat': [0.2, 11.5, 11.5, 11.5, 8, 8, 0.2]
})

# 核心分箱逻辑:相邻行y_hat值不同则分箱编号+1
df['bin'] = (df['y_hat'] != df['y_hat'].shift()).cumsum()

print(df)

输出结果

age  y_hat  bin
0    1    0.2    1
1    1   11.5    2
2    2   11.5    2
3    3   11.5    2
4    3    8.0    3
5    3    8.0    3
6    3    0.2    4

逻辑说明

  • df['y_hat'].shift()作用是将y_hat列整体向下偏移一行,使得当前行可以直接和上一行的y_hat值做对比
  • !=判断得到布尔序列,值变化的位置返回True对应数值1,无变化返回False对应数值0
  • cumsum()对布尔序列累加,每次遇到值变化的位置分箱编号自动+1,完全符合你的分箱规则

如果担心浮点数存储精度导致相等判断出错,可以替换核心逻辑为如下写法,规避精度问题:

import numpy as np
df['bin'] = (~np.isclose(df['y_hat'], df['y_hat'].shift())).cumsum()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:45:00