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

如何在Pandas中通过groupby按部门对Rank字段创建分箱?

问题

我有一个包含name、dept、Rank字段的DataFrame,希望按dept分组,对每个部门的Rank字段创建分箱,生成对应Good、Avg、Poor的Comment列。目前我已通过逐个筛选部门调用pd.qcut实现该功能,但想了解如何使用groupby方法完成此操作。

原始数据:

name  dept  Rank
"A"  "ENG"  1
"A"  "MGMT"  1
"B"  "ENG"  2
"C"  "MGMT"  2
"D"  "MGMT"  3
"E"  "ENG"  3

期望结果:

name  dept  Rank  Comment
"A"  "ENG"  1  Good
"A"  "MGMT"  1  Good
"B"  "ENG"  2  Avg
"C"  "MGMT"  2  Avg
"D"  "MGMT"  3  Poor
"E"  "ENG"  3  Poor

当前实现代码:

df['Comment'] = pd.qcut(df[df['dept'] == "ENG"]['Rank'], q=[0.0, .25, .5, 1.0], labels=['Good', 'Avg', 'Poor'])
df['Comment'] = pd.qcut(df[df['dept'] == "MGMT"]['Rank'], q=[0.0, .25, .5, 1.0], labels=['Good', 'Avg', 'Poor'])
解决方案

可以通过groupby('dept')对数据按部门分组,再用apply为每个分组单独执行pd.qcut分箱逻辑,最后将结果合并回原DataFrame:

import pandas as pd

# 构造原始数据
data = [
    ("A", "ENG", 1),
    ("A", "MGMT", 1),
    ("B", "ENG", 2),
    ("C", "MGMT", 2),
    ("D", "MGMT", 3),
    ("E", "ENG", 3)
]
df = pd.DataFrame(data, columns=['name', 'dept', 'Rank'])

# 使用groupby + apply实现分组分箱
df['Comment'] = df.groupby('dept')['Rank'].apply(
    lambda x: pd.qcut(x, q=[0.0, 0.25, 0.5, 1.0], labels=['Good', 'Avg', 'Poor'])
)

print(df)

代码说明

  • groupby('dept')['Rank']:按部门分组,仅保留Rank列进行后续分箱处理
  • lambda x: pd.qcut(...):对每个部门的Rank数据执行分箱,指定分位数区间和对应标签
  • 执行后结果会自动按原数据索引匹配,直接赋值给Comment列即可得到目标结果

执行上述代码后,输出结果与期望一致:

name   dept  Rank Comment
0    A    ENG     1    Good
1    A   MGMT     1    Good
2    B    ENG     2     Avg
3    C   MGMT     2     Avg
4    D   MGMT     3    Poor
5    E    ENG     3    Poor

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:20:27