Сначала определяется категориальный порядок вашей профессии.Предполагается, что столбцы упорядочены, как показано.
cat = (pd.Categorical(['director','actor', 'writer', 'producer'], ordered=True)
.reorder_categories(['director','actor', 'writer', 'producer'])
)
# stack to be able to sort by column name
# then sort_values
new_df = (test_df.stack()
.astype(cat).cat.codes
.reset_index()
.sort_values([0,'level_1'])
.groupby('primaryName', as_index=False)
.first()
)
# get the correct order by merge:
(test_df.merge(new_df, on='primaryName')
.sort_values([0,'level_1'])['primaryName']
)
Вывод:
1 martin scorsese
2 leonardo dicaprio
3 jonah hill
0 jordan belfort
Name: primaryName, dtype: object