アルゴリズムとはほど遠く期待されているものとは異なるような気がしますが、力技で作ってみました。
python
1import pandas as pd
2
3
4# 設問のデータフレームを用意
5df = pd.read_csv(
6 "memo",
7 delim_whitespace=True,
8 header=None,
9 names=["name", "col2", "col3", "col4"],
10 index_col=["name"],
11)
12
13# 列ごとに加点
14ascending_rules = {"col2": True, "col3": True, "col4": False}
15for key, rule in ascending_rules.items():
16 df["point_" + key] = (
17 df.loc[:, key].sort_values().rank(ascending=rule).astype(int)
18 )
19
20# 加点の合計
21df["total"] = df[["point_col2", "point_col3", "point_col4"]].sum(axis=1)
22print(df, "\n") # デバッグ用
23
24# 並び替え
25df.sort_values(by=["total"], ascending=False, inplace=True)
26print(df)
実行結果
terminal
1$ python mul_col_sort.py
2 col2 col3 col4 point_col2 point_col3 point_col4 total
3name
4A 5.4 -5.70 1.70 1 2 1 4
5B 9.2 -5.34 0.67 2 3 2 7
6C 10.9 -11.71 0.45 3 1 3 7
7D 23.2 -2.11 0.04 4 6 6 16
8E 24.1 -3.35 0.21 5 5 4 14
9F 29.5 -3.79 0.20 6 4 5 15
10
11 col2 col3 col4 point_col2 point_col3 point_col4 total
12name
13D 23.2 -2.11 0.04 4 6 6 16
14F 29.5 -3.79 0.20 6 4 5 15
15E 24.1 -3.35 0.21 5 5 4 14
16B 9.2 -5.34 0.67 2 3 2 7
17C 10.9 -11.71 0.45 3 1 3 7
18A 5.4 -5.70 1.70 1 2 1 4