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

如何按分位数对DataFrame进行分组(而非仅计算分位数)

结论

按自定义分位点给数据做分组完全不需要用for-loop,主流数据处理库都有现成的向量化实现,运行效率比手写循环高很多。

具体实现(Python pandas 环境)

就用你给出的样例参数做演示:

  • 待处理数据列:[1,2,3,4,5,6,7,8,9,10]
  • 自定义分位点列表:[0, 0.33, 0.66, 1]
  • 分组要求:按分位点切为3组,分组名无限制

直接调用pandas内置的qcut方法就能一步完成分箱,不需要写任何循环逻辑:

import pandas as pd

# 构造测试DataFrame
df = pd.DataFrame({'num': [1,2,3,4,5,6,7,8,9,10]})
# 传入自定义分位点,直接生成分组标签
quantile_list = [0, 0.33, 0.66, 1]
df['group_id'] = pd.qcut(df['num'], q=quantile_list, labels=False)

运行后会自动按分位点切分数据:

  • 数值落在0~0.33分位区间的,统一标记为第0组
  • 数值落在0.33~0.66分位区间的,统一标记为第1组
  • 数值落在0.66~1分位区间的,统一标记为第2组

如果需要自定义分组名称,只要给labels参数传入和分组数匹配的名称列表就行,哪怕分位点列表长度变化、分组数增减,代码逻辑都不需要调整。

其他可选方案

如果有更灵活的切分需求,也可以先用numpy的quantile方法算出每个分位点对应的实际数值阈值,再用pd.cut按固定阈值切分,整个过程依然是向量化运算,不需要手写for循环。

只有当你需要对每个分组执行完全独立、没有统一规则的特殊操作时,才需要遍历分组对象写循环,单纯的分位点切分分组步骤完全不需要用到循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:48:22