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

时间:2016-11-28 18:46:05

标签: python pandas apply

我有一个列表

function iTri(s) {  
  var triLength = 140.60;  
  var result = {};  
  var str = ' to go!';  
  var lengthLeft = (triLength - s).toFixed(2);  

  switch(true) {
      case s === 0:
        return 'Starting Line... Good Luck!';
      case s <= 2.4:
        result.Swim = lengthLeft + str;
        break;
      case s <= 114.4:
        result.Bike = lengthLeft + str;
        break;
      case s < 130.60:
        result.Run = lengthLeft + str;
        break;
      case s < 140.60:
        result.Run = 'Nearly there!';
        break;
      default:
        return 'You\'re done! Stop running!';
  }
  
  return result;
}

console.log(iTri(0));
console.log(iTri(2));
console.log(iTri(50));
console.log(iTri(120));
console.log(iTri(135));
console.log(iTri(145));

对这些值进行加权,以便l = ['xyz','abc','mnq','qpr'] 我有一个pandas数据框,其中包含一组包含值的列。

xyz>abc>mnq>qpr

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

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

有没有一种优雅的方法来完成这个过程而不需要使用权重字典?

1 个答案:

答案 0 :(得分:3)

您可以将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