pandasドリル第12回の問題は「合計の列の小さい順にソートするには?」です。
つとむ先生の紹介
20数年、最適化関連の案件に従事するビープラウドの技術士(情報工学)。2014年より最適化のモデル作成にPythonを使い始め、効率的に開発できるようになる。東京海洋大学、青山学院大学、慶應義塾大学、上智大学に非常勤講師としての勤務経験がある。また、オペレーションズ・リサーチ学会に約30年所属し、理事を2期務めた。フェロー。
主な著書はモデリングの諸相、Python言語によるビジネスアナリティクス、今日から使える!組合せ最適化、データ分析ライブラリーを用いた最適化モデルの作り方
問題
df1
(問題の直下にあります)に、テストの結果の表が入っています。
df1
を、下記のようにTotalの小さい順にソートしてください。
結果は、変数result
に入れてください。
1生徒に対応する行は、1まとまりにしてください。
変数df1の内容
Name | Subject | Point | Total | |
---|---|---|---|---|
0 | Alice | 国語 | 87 | 159 |
1 | Alice | 算数 | 72 | 159 |
2 | Bob | 国語 | 65 | 157 |
3 | Bob | 算数 | 92 | 157 |
変数resultに入るべきDataFrame
Name | Subject | Point | Total | |
---|---|---|---|---|
2 | Bob | 国語 | 65 | 157 |
3 | Bob | 算数 | 92 | 157 |
0 | Alice | 国語 | 87 | 159 |
1 | Alice | 算数 | 72 | 159 |
回答
result = df1.sort_values(['Total', 'Name'])
※result = df1.sort_values('Total', kind='mergesort')でも可
解説
df1.sort_values(['Total', 'Name'])
とします。
ソートの第1キーはTotal、第2キーはNameです。第2キーをNameにすることで、Totalが同じ場合にNameもまとめることができます。
詳しくは下記のドキュメントをお読みください。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.sort_values.html
前回の問題
第11回つとむ先生のpandasドリル【df.groupbyを用いてDataFrameの値を合計した列を追加するには?】はこちらからご覧ください。