如何按自定义优先级从Pandas多状态列中取最大值生成最差状态列
Pandas自定义优先级取每行最大状态的实现方案
- 核心思路是先给每个状态绑定自定义优先级的权重值,把字符串比较转为数值比较,再将最大权重映射回原始状态值即可,全程无需手写if-else判断。
简洁向量化实现(推荐,性能更高)
适合绝大多数场景,尤其是数据量较大的情况:
import pandas as pd # 1. 定义状态与优先级权重的映射,权重越高代表优先级越高(即你定义的更差的状态) priority_map = {'T':12, 'N':11, '0':10, 'U':9, 'D':8, '1':7, '2':6, '3':5, '4':4, '5':3, '6':2, '8':1} # 反转映射,方便后续通过权重查原始状态 reverse_priority = {v:k for k,v in priority_map.items()} # 2. 替换为你实际的6个状态列的列名 status_cols = ['col1', 'col2', 'col3', 'col4', 'col5', 'col6'] # 3. 一键生成WORST STATUS列 df['WORST STATUS'] = df[status_cols].replace(priority_map).max(axis=1).map(reverse_priority)
可选逐行实现(逻辑更直观)
如果需要在取数过程中加额外的自定义判断,可以用逐行apply的写法:
df['WORST STATUS'] = df[status_cols].apply( lambda row: reverse_priority[max(priority_map[val] for val in row)], axis=1 )
注意:如果数据集里存在不在
T, N, 0, U, D, 1, 2, 3, 4, 5, 6, 8范围内的状态值,需要先将对应值补充到priority_map中避免报错。
内容的提问来源于stack exchange,提问作者Stephen Mason
相关产品推荐
相关产品推荐

