使用 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 进行比较,但是有更简单的方法吗?
假设:
- 领带由他们的平均排名标记(例如得分
9 > 9 > 7 > 6 >...
将排名为 1.5, 1.5, 3, 4,...
。这可以在 df.rank(method="...")
内更改(参见 documentation)。
-
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
我有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 进行比较,但是有更简单的方法吗?
假设:
- 领带由他们的平均排名标记(例如得分
9 > 9 > 7 > 6 >...
将排名为1.5, 1.5, 3, 4,...
。这可以在df.rank(method="...")
内更改(参见 documentation)。 -
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