如何用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
相关产品推荐
相关产品推荐

