python - 选择集合中最高权重值的优雅方式

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

我有一个列表

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

这些值的权重使得 xyz>abc>mnq>qpr 我有一个 pandas 数据框,其中有一列包含值集。

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

现在,我想选择集合中的最高值,以便在应用自定义函数后剩下

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

有没有一种优雅的方法可以在不求助于权重字典的情况下完成这个过程?

您可以使用 pd.Categorical 和参数 ordered=True 并设置 categories=l[::-1] 以获得您想要的顺序。

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