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

Pandas分组后qcut分箱异常,标签无法正确应用问题

解决方案

要实现每组内按sequence的前25%、次25%等区间分箱并统一标注季度标签,你可以通过组内百分比排名+固定区间分箱的方式解决,替代直接用pd.qcut的方案,具体步骤如下:

步骤1:计算组内sequence的百分比排名

先按courseId、raceType、raceDistance分组,对每组的sequence列计算其在组内的百分比排名,得到每个障碍物在当前赛事中的相对位置占比:

df['pct_rank'] = df.groupby(['courseId', 'raceType', 'raceDistance'])['sequence'].rank(pct=True)

这里的rank(pct=True)会返回0到1之间的数值,代表当前sequence在组内的百分位位置(比如组内最小的sequence会得到接近0的值,最大的得到1)。

步骤2:按固定百分位区间分箱并标注标签

用pd.cut指定固定的百分位区间,将百分比排名映射到对应的季度标签:

df['race_stage'] = pd.cut(
    df['pct_rank'],
    bins=[0, 0.25, 0.5, 0.75, 1],
    labels=['Quarter1', 'Quarter2', 'Quarter3', 'Quarter4'],
    include_lowest=True  # 确保最小的pct_rank值(接近0)能被分到第一个区间
)

方案优势

  • 直接用pd.qcut分组分箱时,每组的分箱区间是基于组内数据分布生成的,不同组区间不一致,导致标签无法统一;
  • 先计算组内百分比排名,再用固定区间的pd.cut,能保证所有组都严格按照「前25%、次25%、第三25%、最后25%」的规则划分,完全适配不同障碍物数量的赛事。

边界情况说明

如果某组的障碍物数量少于4个(比如3个),部分季度标签会没有对应数据,但这是符合逻辑的——毕竟赛事本身没有足够多的障碍物来填满四个季度区间,无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:09:54