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

如何用Python为DataFrame特定分组的Salary列设置上限

按ID分组为Salary列设置不同上限的实现方法

假设我们有如下示例DataFrame(模拟你的数据源):

import pandas as pd
import numpy as np

# 创建测试数据
data = {
    'ID': [1, 1, 2, 2, 3, 3],
    'Salary': [5, 3, 4, 2, 6, 4],
    'Children': [2, 1, 0, 3, 1, 2],
    'Days': [22, 25, 19, 23, 20, 24]
}
df = pd.DataFrame(data)

我们需要实现:ID=1时Salary上限为4,ID=2时上限为3,ID=3时上限为5。下面是两种实用的实现方式:

方法一:利用groupby + transform + clip(适合大数据集)

这种方法通过分组后对每个组单独设置上限,效率较高,适合处理大规模数据:

# 定义ID对应的薪资上限字典
id_salary_cap = {1: 4, 2: 3, 3: 5}

# 按ID分组,对Salary列应用transform,结合clip设置上限
df['Salary'] = df.groupby('ID')['Salary'].transform(
    lambda x: x.clip(upper=id_salary_cap[x.name])
)

方法二:利用map + np.minimum(简洁直观)

通过map获取每行对应的薪资上限,再用np.minimum直接取Salary和上限的较小值,代码更简洁:

# 定义ID对应的薪资上限字典
id_salary_cap = {1: 4, 2: 3, 3: 5}

# 为每行匹配对应上限,然后取Salary与上限的最小值
df['Salary'] = np.minimum(df['Salary'], df['ID'].map(id_salary_cap))

处理后的结果

两种方法都会得到如下输出:

ID  Salary  Children  Days
0   1       4         2    22
1   1       3         1    25
2   2       3         0    19
3   2       2         3    23
4   3       5         1    20
5   3       4         2    24

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 11:45:23