- データサイエンス100本ノックをやりきる会を作りました🎉
- こちらのSlack招待URLからご参加ください!!
- ぜひ一緒に励まし合いながら、データサイエンス100本ノックをやり切りたいと思っています!
##Youtube
動画解説もしています。
##問題
P-019: レシート明細データフレーム(df_receipt)に対し、1件あたりの売上金額(amount)が高い順にランクを付与し、先頭10件を抽出せよ。項目は顧客ID(customer_id)、売上金額(amount)、付与したランクを表示させること。なお、売上金額(amount)が等しい場合は同一順位を付与するものとする。
##解答
df_amount_rank = pd.concat([df_receipt[['customer_id', 'amount']] \
,df_receipt['amount'].rank(method='min', ascending=False)], axis=1)
df_amount_rank.columns = ['customer_id', 'amount', 'amount_ranking']
df_amount_rank.sort_values('amount_ranking', ascending=True).head(10)
##出力
customer_id | amount | amount_ranking | |
---|---|---|---|
1202 | CS011415000006 | 10925 | 1 |
62317 | ZZ000000000000 | 6800 | 2 |
54095 | CS028605000002 | 5780 | 3 |
4632 | CS015515000034 | 5480 | 4 |
72747 | ZZ000000000000 | 5480 | 4 |
10320 | ZZ000000000000 | 5480 | 4 |
97294 | CS021515000089 | 5440 | 7 |
28304 | ZZ000000000000 | 5440 | 7 |
92246 | CS009415000038 | 5280 | 9 |
68553 | CS040415000200 | 5280 | 9 |
##解説
・PandasのDataFrame/Seriesにて、ランク列を新たに作成し、列を連結して、データを順位付けする方法です。
・数字情報をランキング形式で見たい時に使用します。
・'concat('<列名A>','<列名B>','<列名C>')'は、指定した列を連結する関数です。concatenate(=連結する)という動詞が元です。
・'rank(method(average/min/max/first),'ascending=True/False')'は、指定した列のランキングを表示する関数です。
・今回の場合、amount のランキングを rank で表示し、指定された列と連結するために concat を使用しています。
・'columns('<列名A>','<列名B>','<列名C>')'は、列名を再指定する関数です。
・P-017,018で使用した sort_values を用いて、ランキング順に並び直して表示しています。
※rankの参考記事はこちらです