Python实现:为DataFrame中每个人员选取最高优先级组别
解决DataFrame中按优先级选取组别的问题
针对你的需求,我们可以通过定义优先级映射+逐行处理的方式快速实现,步骤清晰易懂,适合Python新手:
步骤1:定义优先级规则
首先给每个组别分配一个优先级数值,数值越小代表优先级越高:
priority = {'01_high': 1, '02_medium': 2, '03_low': 3}
步骤2:编写处理函数
写一个简单的函数,接收每行数据,比较group1和group2的优先级,返回优先级更高的组别:
def get_highest_priority(row): # 获取两个组别的优先级值 p1 = priority[row['group1']] p2 = priority[row['group2']] # 优先级高的返回对应组别,相等时返回任意一个都可 return row['group1'] if p1 < p2 else row['group2']
步骤3:应用函数生成新列
用apply方法将函数作用到DataFrame的每一行,生成新列group3:
完整代码如下:
import pandas as pd data = {'Name': ['Tom', 'Nick','Jack', 'Ann'], 'group1': ['01_high', '02_medium', '03_low' , '02_medium'], 'group2':['03_low', '03_low', '02_medium', '03_low']} df = pd.DataFrame(data) # 定义优先级映射 priority = {'01_high': 1, '02_medium': 2, '03_low': 3} # 定义处理函数 def get_highest_priority(row): p1 = priority[row['group1']] p2 = priority[row['group2']] return row['group1'] if p1 < p2 else row['group2'] # 新增group3列 df['group3'] = df.apply(get_highest_priority, axis=1) # 查看结果 print(df)
运行结果
执行后会得到你需要的DataFrame:
Name group1 group2 group3 0 Tom 01_high 03_low 01_high 1 Nick 02_medium 03_low 02_medium 2 Jack 03_low 02_medium 02_medium 3 Ann 02_medium 03_low 02_medium
如果你想让代码更简洁,也可以用lambda函数替代单独的处理函数,效果完全一样:
df['group3'] = df.apply(lambda row: row['group1'] if priority[row['group1']] < priority[row['group2']] else row['group2'], axis=1)
内容的提问来源于stack exchange,提问作者SAJ
相关产品推荐
相关产品推荐

