Pandas提取最高程度的资格基础重要性

2024-06-16 09:28:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,我需要根据某个候选人完成的不同学位为其选择最高学位。要选择最高度数,应遵循以下顺序:

博士>;工商管理硕士>;马斯特斯>;单身汉>;其他

博士学位的优先级最高,其他学位的优先级最低

数据帧如下所示:

ID  Degree
1   Bachelors
1   Masters
1   PHD
2   Bachelors
2   Others
3   PHD
3   Masters

输出应如下所示:

ID Degree
1  PHD
2  Bachelors
3  PHD 

我甚至不知道如何从这个需求开始,因此无法在这里添加任何代码片段


Tags: 数据gtid顺序phd博士度数博士学位
3条回答

使用字典对项目进行排序:

order_dict = {'PHD' : 0, 'MBA' : 1, 'Masters' : 2,'Bachelors':3, 'Others' : 4}


df.assign(key=df["Degree"].map(order_dict)).sort_values(["ID", "key"]).drop(
    "key", axis=1
)

print(df)
   ID     Degree
2  1   PHD      
1  1   Masters  
0  1   Bachelors
3  2   Bachelors
4  2   Others   
5  3   PHD      
6  3   Masters  

如果您想要唯一,只需添加drop_duplicates和ID上的子集:

print(df.assign(key=df["Degree"].map(order_dict)).sort_values(["ID", "key"]).drop(
    "key", axis=1
).drop_duplicates(subset=['ID'],keep='first'))

  ID     Degree
2  1   PHD      
3  2   Bachelors
5  3   PHD    

'试试这个:但不确定这是否是您期望的答案'

import pandas as pd

df3 = pd.DataFrame({'ID':[1,1,1,2,2,3,3],'Degree':['Bachelors','Masters','PHD','Bachelors','Others','PHD','Masters']})

df3

df3['Degree'].value_counts()

def priority(val):  
        if val == 'PHD':  
                return 1  
        elif val == 'Bachelors':  
               return 2  
        else:  
               return 0  

df3[df3['Degree'].apply(lambda x: priority(x)) >0]['Degree'].tail(3)

如果我理解正确,我们做Categorical,然后sort_values+drop_duplicates

df.Degree = pd.Categorical(df.Degree, ordered=True,
                   categories='PHD>MBA>Masters>Bachelors>Others'.split('>')[::-1])
Yourdf=df.sort_values('Degree').drop_duplicates('ID',keep='last')
   ID     Degree
3   2  Bachelors
2   1        PHD
5   3        PHD

相关问题 更多 >