Fizi
Fizi

Reputation: 1861

python - elegant way to pick the highest weighted value in set

I have a list such that

l = ['xyz','abc','mnq','qpr']

These values are weighted such that xyz>abc>mnq>qpr I have a pandas dataframe with a column that has sets of values.

                      COL_NAME    
0         set(['xyz', 'abc'])     
1         set(['xyz']) 
2         set(['mnq','qpr']) 

Now, I want to pick the highest values in the sets such that after I apply the custom function I am left with

                  COL_NAME    
0         set(['xyz'])     
1         set(['xyz']) 
2         set(['mnq']) 

Is there an elegant way to do this process without resorting to a dictionary of weights?

Upvotes: 4

Views: 518

Answers (1)

piRSquared
piRSquared

Reputation: 294488

you can use pd.Categorical with the parameter ordered=True and set the categories=l[::-1] to get the order you'd like.

def max_cat(x):
    return set([pd.Categorical(x, l[::-1], True).max()])

df.COL_NAME.apply(max_cat)

0    {xyz}
1    {xyz}
2    {mnq}
Name: COL_NAME, dtype: object

Upvotes: 3

Related Questions