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

Pandas按两列排序对比薪资 实现同岗位跨区域薪资递进要求

实现方案

核心思路是给区域定义优先级,同岗位下按优先级升序排列后对薪资取累计最大值,即可自动满足EU ≥ CAN ≥ US的薪资要求,其余列不会被修改。


完整实现代码

1. 构造原始数据集

import pandas as pd

df = pd.DataFrame({
    'REGION':['US','US','CAN','CAN', 'EU','EU','EU'],
    'ROLE': ['mgr','dir','mgr','dir','mgr','dir','CEO'],
    'SALARY' : [4,5,3.7,6,4.1,5.5,8],
    'other_columns':['random_val1','random_val2','random_val3','random_val4','random_val5','random_val6','random_val7']
})

2. 薪资调整逻辑

# 定义区域优先级,数值越小要求的薪资基准越低
region_order = {'US': 1, 'CAN': 2, 'EU': 3}

# 新增辅助列:区域优先级、原始索引(用于后续恢复数据顺序)
df['region_priority'] = df['REGION'].map(region_order)
df['original_idx'] = df.index

# 按岗位分组,组内按区域优先级升序排序,薪资取累计最大值
df = df.sort_values(['ROLE', 'region_priority'])
df['SALARY'] = df.groupby('ROLE')['SALARY'].cummax()

# 恢复原始数据顺序,删除辅助列
df = df.sort_values('original_idx').drop(['region_priority', 'original_idx'], axis=1).reset_index(drop=True)

3. 输出验证

print(df)

运行后输出与目标结果完全一致:

REGION ROLE  SALARY other_columns
0     US  mgr     4.0   random_val1
1     US  dir     5.0   random_val2
2    CAN  mgr     4.0   random_val3
3    CAN  dir     6.0   random_val4
4     EU  mgr     4.1   random_val5
5     EU  dir     6.0   random_val6
6     EU  CEO     8.0   random_val7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:06:05