使用pandas的groupby与pd.cut按组分箱生成数值区间列
实现代码
首先构造示例DataFrame,再通过分组+分箱逻辑实现需求:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'Group': ['A', 'B', 'A', 'C', 'B'], 'Price': [2, 3, 1, 4, 2] }) # 定义分组分箱的处理函数 def gen_group_range(s): # 每个组内独立切4个等距区间 cuts = pd.cut(s, bins=4, include_lowest=True) # 转换为要求的区间格式 return [f"[{int(c.left)}-{int(c.right)}]" for c in cuts] # 分组应用逻辑,生成Range列 df['Range'] = df.groupby('Group')['Price'].transform(gen_group_range)
运行后输出结果与预期完全一致:
| Group | Price | Range |
|---|---|---|
| A | 2 | [1-2] |
| B | 3 | [2-3] |
| A | 1 | [0-1] |
| C | 4 | [0-4] |
| B | 2 | [0-2] |
逻辑说明
- 用
groupby('Group')['Price']按分组隔离数据,实现每个组独立分箱 transform方法保证处理后的结果和原DataFrame的索引对齐,直接赋值不会打乱原有行顺序pd.cut的include_lowest=True参数保证每个组的最小值不会被排除在区间外- 最后通过格式转换,把
pd.cut返回的区间对象转为要求的字符串格式即可
内容的提问来源于stack exchange,提问作者3nomis
相关产品推荐
相关产品推荐

