LoginSignup
0
1

More than 1 year has passed since last update.

値の大きさごとにランク付けしよう!:rank(),sort_values()他

Posted at

この膨大なデータ、値が大きい順にランク付けしたいなぁ
この商品データを単価が大きい順にランク付けしたいなぁ
こんな時、データ加工の時によくあることだと思います。

そんなときは、値順にランク付けが出来るrank()関数というものがあります。
最初にデータを用意していきます。

import pandas as pd
import numpy as np

df01 = pd.DataFrame( {'name':['A', 'B', 'C', 'D' ,'E',"F"],
'math':[60, 70, 80 ,90,100,60]})
df01
  name	math
0	A	60
1	B	70
2	C	80
3	D	90
4	E	100
5	F	60

今回については、6行しかありませんので、分かりやすいかと思いますが、実際の実務では100万行などなる場合も全く珍しくありません。
そんな膨大なデータを一気にランク付け出来たら便利ですよね。
それでは、実際にコードを書いていきます。

rank = df01["math"].rank(method="min" , ascending=False)
rank
0    5.0
1    4.0
2    3.0
3    2.0
4    1.0
5    5.0

method="min"にすることによって、重複している値が同じ値になります。
別でmethod="first"にすることによって、上の行にあるものから順番に番号がつきます。
ascending=Falseにすることによって、大きい値順から順位がつきます。

df01["math"].rank(method="first" , ascending=False)
0    5.0
1    4.0
2    3.0
3    2.0
4    1.0
5    6.0

先ほど作成したrankともともとのデータフレームを結合していきます。

df01_rank = pd.concat([df01 , rank] , axis=1)
df01_rank
name	math	math
0	A	60	5.0
1	B	70	4.0
2	C	80	3.0
3	D	90	2.0
4	E	100	1.0
5	F	60	5.0

このままだと、カラム名が重複しているので、カラム名の変更と、ランク順にsort_values()を用いて見やすくしていきます。

df01_rank.columns=["name" , "math" , "rank"]
df01_rank.sort_values("rank" ,ascending=True)
	name	math	rank
4	E	100	1.0
3	D	90	2.0
2	C	80	3.0
1	B	70	4.0
0	A	60	5.0
5	F	60	5.0

このように上手くランク付けと並びかえをすることができました。
是非お持ちのデータで活用してみてください。

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