Поместите вашу иерархию в список, используя индекс списка.
l = ['Baby', 'Child', 'Teenager', 'Adult']
df = pd.DataFrame({'Name': ['Adam', 'Barry', 'Ben', 'Adam', 'Barry', 'Ben'], 'Stage': ['Child', 'Child', 'Adult', 'Teenager', 'Adult', 'Baby']})
cond = [df['Stage'] == 'Baby',df['Stage'] == 'Child',df['Stage'] == 'Teenager',df['Stage'] == 'Adult']
df['Highest_Stage_Reached'] = np.select(cond, [0,1,2,3])
Name Stage Highest_Stage_Reached
0 Adam Child 1
1 Barry Child 1
2 Ben Adult 3
3 Adam Teenager 2
4 Barry Adult 3
5 Ben Baby 0
df['Highest_Stage_Reached'] = (df.groupby('Name')['Highest_Stage_Reached'].transform(max))
Name Stage Highest_Stage_Reached
0 Adam Child 2
1 Barry Child 3
2 Ben Adult 3
3 Adam Teenager 2
4 Barry Adult 3
5 Ben Baby 3
df['Highest_Stage_Reached'] = df['Highest_Stage_Reached'].apply(lambda x: l[x])
print(df)
output:
Name Stage Highest_Stage_Reached
0 Adam Child Teenager
1 Barry Child Adult
2 Ben Adult Adult
3 Adam Teenager Teenager
4 Barry Adult Adult
5 Ben Baby Adult