使用 pandas DataFrame 创建比较结果矩阵

Create matrix of comparison results using pandas DataFrame

我有pandas个DataFrame,测试结果如下:

  service_name   result_1   result_2   result_3         
  service_1      2.17       100.41     0.4         
  service_2      1.11       131.41     0.45        
  service_3      4.12       234.41     0.51         

我的目标是创建另一个 pandas DataFrame,其中包含每个测试指标和总分的比较结果,考虑到对于某些结果,价值越高,分数越差

  service_name   mark_1    mark_2      mark_3(the lower value is better score)   total_mark        
  service_1      2         3           1                                         2
  service_2      3         2           2                                         3
  service_3      1         1           3                                         1   

我想我可以逐行逐列与创建一堆中间 DataFrame 进行比较,但是有更简单的方法吗?

假设:

  1. 领带由他们的平均排名标记(例如得分 9 > 9 > 7 > 6 >... 将排名为 1.5, 1.5, 3, 4,...。这可以在 df.rank(method="...") 内更改(参见 documentation)。
  2. mark_N 的总和越小,得到的 total_mark 越小。

代码:

# the output dataframe
out=df[["service_name"]].copy()
# individual marks
out["mark_1"] = df["result_1"].rank()
out["mark_2"] = df["result_2"].rank()
out["mark_3"] = df["result_3"].rank(ascending=False)
# total mark
out["total_mark"] = out[["mark_1", "mark_2", "mark_3"]].sum(axis=1)
out["total_mark"] = out["total_mark"].rank(ascending=False)

结果:

print(out)

  service_name  mark_1  mark_2  mark_3  total_mark
0    service_1     2.0     1.0     3.0         2.0
1    service_2     1.0     2.0     2.0         3.0
2    service_3     3.0     3.0     1.0         1.0