根据变量对列进行排名

时间:2020-07-06 15:19:42

标签: python pandas

我有一个像这样的数据框-

  Metric       Value         Model
f1_measure  0.854053454   Logistic_Regression
auc         0.927363382   Logistic_Regression
precision   0.871229558   Logistic_Regression
f1_measure  0.957372309   Random_Forest
auc         0.994050551   Random_Forest
precision   0.974012599   Random_Forest
f1_measure  0.823266765   Naive_Bayes
auc         0.91573591    Naive_Bayes
precision   0.83156611    Naive_Bayes

现在我要创建另一个数据框-

       Model_name         Rank      Metric
 
      Random_Forest          1        auc
      Logistic_Regression    2        auc
      Naive_Bayes            3        auc
 

此数据帧是使用用户提供的Metric == {'auc'创建的。我需要根据用户给定的指标值创建一个具有排名的新数据框,如上所示。

3 个答案:

答案 0 :(得分:2)

如何使用布尔索引来提取所需内容,分配等级和排序:

(df[df.Metric=='auc']
   .assign(Rank=lambda x: x['Value'].rank(ascending=False))
   .sort_values('Rank')
)

输出:

  Metric     Value                Model  rank
4    auc  0.994051        Random_Forest   1.0
1    auc  0.927363  Logistic_Regression   2.0
7    auc  0.915736          Naive_Bayes   3.0

答案 1 :(得分:1)

使用boolean indexing过滤度量等于auc的数据帧,然后使用Series.rank将过滤后的数据帧排列在列Value上,最后使用DataFrame.sort_values将数据框排序为Rank

df1 = df[df.Metric.eq('auc')]
df1 = df1.assign(Rank=df1.pop('Value').rank(ascending=False)).sort_values(by='Rank')

结果:

# print(df1)

  Metric                Model  Rank
4    auc        Random_Forest   1.0
1    auc  Logistic_Regression   2.0
7    auc          Naive_Bayes   3.0

答案 2 :(得分:0)

那这样的事情呢?

df[df.Metric == 'auc'].sort_values(by = 'Value', ascending = False)