0
0

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.

【Python】データサイエンス100本ノック(構造化データ加工編) 020 解説

Last updated at Posted at 2020-08-04

##Youtube
動画解説もしています。

##問題
P-020: レシート明細データフレーム(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='first', 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
10320 ZZ000000000000 5480 5
72747 ZZ000000000000 5480 6
28304 ZZ000000000000 5440 7
97294 CS021515000089 5440 8
596 CS015515000083 5280 9
11275 CS017414000114 5280 10

##解説
・PandasのDataFrame/Seriesにて、ランク列を新たに作成し、列を連結して、データを順位付けする方法です。
・数字情報をランキング形式で見たい時に使用します。
'concat('<列名A>','<列名B>','<列名C>')'は、指定した列を連結する関数です。'axis=1'は、列を連結することを指します。(※'axis=0'は行方向、'axis=1'は列方向を指します)
'rank(method(average/min/max/first),'ascending=True/False')'は、指定した列のランキングを表示する関数です。
averageは平均値、minは低い方に揃える、maxは高い方に揃える、firstは出てきた順にランクを付与します。
・今回の場合、amount のランキングを rank で表示し、指定された列と連結するために concat を使用しています。
'columns('<列名A>','<列名B>','<列名C>')'は、列名を再指定する関数です。
・P-017,018で使用した sort_values を用いて、ランキング順に並び直して表示しています。

※rankの参考記事はこちらです

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?