Pythonでプログラミングをしていて意外と混乱してしまうのが、sortの仕方です。
実は「リスト」「numpy配列」「Series」「DataFrame」でソートする時のコードの書き方が微妙に違います。
ソートしようとする度に右往左往しないよう、下記に整理しましたのでご活用ください!
sortの書き方 一覧表
sortの書き方を一覧表にまとめました。これを見れば迷わなくて済むと思います。
上書きされない書き方(通常はこちら) | 上書きするやり方 | |
リスト | ・sorted(〇〇, reverse=True or False) | ・○○.sort(reverse=True or False) |
Numpy 配列 |
・sorted(〇〇, reverse=True or False) ・np.sort(〇〇) |
・○○.sort(reverse=True or False) |
Series |
・sorted(〇〇, reverse=True or False) ・np.sort(〇〇) ・〇〇.sort_values(ascending=True or False) |
– |
DataFrame | ・〇〇.sort_values(‘カラム名’, ascending=True or False) →Dataframeのまま。ソートしたいカラムを指定すること。高い順にしたいなら、ascending=Falseとする。 |
– |
数値の小さい順がsortのデフォルトである
まず、数値の小さい順がsortのデフォルトです!つまり、100と50と10という数値があったとしたら、デフォルトでは10, 50, 100の順番になります。
数値の大きい順にしたい場合は、表に書いているようにreverse=Trueとしたり、ascending=Falseとしてください。低い順のままでいいなら、わざわざ指定する必要はありません。
なお、reverseは「逆にしますか?」という意味ですので、数値の大きい順にしたい場合はデフォルトの逆順と言うことでTrueと答えます。
一方、ascendingは「上昇させますか?」という意味ですので、数値の大きい順にしたい場合はFalseと答えます。
np.sort()のところだけ、[::-1]をつけて順番を変えます。[::-1]という書き方の意味については、こちらの記事をご参照ください。

上書きするかどうかの違い
たとえば、次のようなリストがあるとします。
list_a = [100, 20, 35, 65, 5, 50]
上書きをしない方法だと、変更は反映されません。
下記を見ていただくとわかると思います。
sorted(list_a)
[5, 20, 35, 50, 65, 100]
list_a
[100, 20, 35, 65, 5, 50] ←list_aは上書きされていない
イコールで結ぶ形にすれば、上書きすることができます。
list_a = sorted(list_a)
list_a
[5, 20, 35, 50, 65, 100]
一方、上書きをする書き方だと、イコールで結ぶ書き方をしなくても変更が反映されてしまいます。
list_a.sort()
list_a
[5, 20, 35, 50, 65, 100] ←list_aは上書きされちゃっている
通常、上書きする時はイコールで結ぶやり方をすることが多いと思いますので、.sort()のように上書きをする書き方は避けたほうが無難かも知れません。
無意識のうちに上書きしてしまった、という事態になりかねません。