0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pandasでアメフト選手のデータをソートや順位付けをするno.14

Posted at

見出しを追加 (37).png
こんにちは、まゆみです。

Pandasの記事をシリーズで書いています。

今回は14回目になります。

今回の記事では、読み込んだCSVファイルのデータを

  • アルファベット順に並べたり
  • 数の若い順に並べたり
  • 順番を逆にしてみたり
  • ランク付けをしたり

してみようと思います。

CSVデータは、第12回目の記事で使った『National Football Leagueの選手のデータ』を今回も使います。

実際にPandasで当データを読み込んだ結果は下のようになります

スクリーンショット 2021-03-19 094252.jpg

こちらのデータを並べ替えることによって、一番背の高い選手や一番体重の重い選手、アルファベット順に並べた時の名前の順が分かります。

ではさっそく始めていきますね。

sort_values()メソッド

値を数の若い順、もしくはアルファベット順に並び替えるにはsort_values() メソッドを使います。

スクリーンショット 2021-03-19 093233.jpg
引用元:Pandasドキュメント

Pandasドキュメントを見てみると、sort_valuesに渡せるパラメーターが色々と書いています。

そのパラメーターのなかで、『by』というパラメーターは必ず書かなければいけません。

その他のパラメーターはオプションですので、書いても書かなくても良いです。

パラメーターby を使う時は

『何によって』ソートするか

ということを引数で明示しなければいけません。

Pandas のドキュメントに

Parameters: by : str or list of str

と書いているのが読めると思いますが

ある1つのコラムを使ってソートしたい時は str(string) コラム名を文字列で書き引数とし

2つ以上のコラム名を使ってソートしたい時は string のリストとしてコラム名を指定して引数とします

では実際に『height_in_inches』(インチ表示の体重)を並べ変えてみます

スクリーンショット 2021-03-19 094544.jpg

height_in_inches コラムの値が小さい物から順に並べ替えられました。

インチ表示じゃ、分かりにくい。

センチメートル表示にしたい

という方は、こちらを参考にしてみてください。

スクリーンショット 2021-03-19 095147.jpg

新しいコラムが既存のコラムの左側につき、数の若い順に並べ変えられました。

アメフトプロ選手の身長って.png

同様に、体重もキログラム表示に変えた後、数の小さい順に並び変えました。

スクリーンショット 2021-03-19 100034.jpg

もし、数の大きい物から順番に並べたい時は

パラメーターascending を False に変えます。

2つ以上のコラムを一気に並べ替える

先ほど少し触れましたが、順番に並べるコラムを2つ以上指定したい時は、引数をリスト型にします

nfl.sort_values( [ "コラム名A", "コラム名B"] )

スクリーンショット 2021-03-19 101409.jpg

height が小さい物順に並べられ、height が同じ値だった場合、その同じheight のなかでweightが小さい順に並べ替えられます。

文字列はアルファベット順がデフォルト値

文字列にsort_values()を使うと、アルファベット順に並べられます。

さらに深堀して、もし、ある文字列のコラムはアルファベット順に、もう一つの文字列のコラムはアルファベット順とは逆の順番で並べたい時は

DataFrame名.sort_values( by= ["A","b"], ascending = [True, False])

と書くと

Aコラムが数の若い順から並べ替えられ、

Bコラムが数が大きい物から順番に並べ替えられます。

では、その実験をするために、"team" "full_name" というコラムのみを取り出して、新しい変数、『nfl_team_name』に代入して新たなDataFrame を作りました。

スクリーンショット 2021-03-19 104354.jpg

このDataFrameを

team 名は アルファベット順に

full_name はアルファベットと反対の順番に

並べ替えてみたいと思います。

下記のイラストのような風に並べ替えます
A team.png

実行結果は下のようになりました。

スクリーンショット 2021-03-19 110028.jpg

では最後にランク付けの方法を書いて終わりにします。

rank()メソッド

誰が一番背が高いか、誰が15番目に高いかという順位を返してくれます。

センチメートル表示に変えた身長のコラムを付けたしました。

スクリーンショット 2021-03-19 111408.jpg

ランク付けをする時に、同じ値があるとその順位を足して2で割った値が割り当てられます。
下記のような結果になります。

スクリーンショット 2021-03-19 111608.jpg

また、rank()メソッドで返された値をよく見ると、177.80センチの人より187.96センチの人の方がランクが低く評価されているのが分かります。

rank()はデフォルトでは、数の若いものほどランキングを高く評価されますから、

ascending = False

にして調整してくださいね。

小数点の値を整数値に変える

また少数点のついた順位はおかしいので、小数点(float) を 整数(integer) に変えます。

スクリーンショット 2021-03-19 112505.jpg

背の高い順に調整して、順位を整数にしたランキングで新しいコラムを作りたいので、rank()メソッドで出した結果を

DataFrame["新しいコラム名"]

に代入しました。

スクリーンショット 2021-03-19 114128.jpg

センチメートルの身長を大きい物順に並べて確かめてみました。

スクリーンショット 2021-03-19 114630.jpg

まとめ

今回の記事はこれくらいで終わりにします

長い記事を最後まで読んでくださりありがとうございました。

次回もまた、Pandasについての記事を引き続き書いていきますね。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?