この記事はデータサイエンスを勉強しながら、データサイエンス協会が提供する__データサイエンス100本ノック(構造化データ加工編)__を解く過程を自分用にまとめたものです。
チャプター | リンク | チャプター | リンク |
---|---|---|---|
P-001~P-016 | part1 | P-052~P-062 | part6 |
P-017~P-022 | part2 | P-063~P-068 | part7 |
P-023~P-031 | part3 | P-069~P-078 | part8 |
P-032~P-039 | part4 | P-079~P-088 | part9 |
P-040~P-051 | part5 | P-089~P-100 | part10 |
- ソート
sort_values()
- データフレームの結合
pd.concat()
- 順位付け
rank()
- 長さや要素数を取得
len()
- ユニークな要素を抽出
unique()
P-017 sort_values()
P-17: 顧客データフレーム(df_customer)を生年月日(birth_day)で高齢順にソートし、先頭10件を全項目表示せよ。
df_customer.sort_values('birth_day').head(10)
sort_values('ソートしたい列名')
:引数で指定した列をソートして昇順で返す。(DataFrame型)
P-018
P-18: 顧客データフレーム(df_customer)を生年月日(birth_day)で若い順にソートし、先頭10件を全項目表示せよ。
df_customer.sort_values('birth_day', ascending=False).head(10)
降順で返したい場合は引数にascending=Flase
を指定する。
P-019 pd.concat()
, rank()
P-19: レシート明細データフレーム(df_receipt)に対し、1件あたりの売上金額(amount)が高い順にランクを付与し、先頭10件を抽出せよ。項目は顧客ID(customer_id)、売上金額(amount)、付与したランクを表示させること。なお、売上金額(amount)が等しい場合は同一順位を付与するものとする。
df_tmp = pd.concat([df_receipt[["customer_id", "amount"]],
df_receipt["amount"].rank(method='min',ascending=False)], axis=1)
df_tmp.columns = ['customer_id', 'amount', 'ranking']
df_tmp.sort_values('ranking', ascending=True).head(10)
pd.concat([df1, df2,])
:第一引数に連結したいdfをリストで指定する。(問題では2つだが、それ以上でも可能)
デフォルトでは縦に結合。(axis=0
)横に結合したい場合は第二引数にaxis=1
を指定する。
rank()
:データを並び替えずに各要素の順位を返す。デフォルトは列、昇順。
行に対して順位付けする場合は引数にaxis=1
を指定する。
降順に順位付けする場合は引数にascending=False
を指定する。
引数method
:同一値に対する処理
method='average'
:平均順位
method='min'
:最小値が順位
method='first'
:登場順に順位付け
P-020
P-020: レシート明細データフレーム(df_receipt)に対し、1件あたりの売上金額(amount)が高い順にランクを付与し、先頭10件を抽出せよ。項目は顧客ID(customer_id)、売上金額(amount)、付与したランクを表示させること。なお、売上金額(amount)が等しい場合でも別順位を付与すること。
df_tmp = pd.concat([df_receipt[["customer_id", "amount"]],
df_receipt['amount'].rank(ascending=False, method='first')], axis=1)
df_tmp.columns = ["customer_id", "amount", "ranking"]
df_tmp.sort_values('ranking').head(10)
P-021 len()
P-021: レシート明細データフレーム(df_receipt)に対し、件数をカウントせよ。
len(df_receipt)
len()
:引数に指定したオブジェクトの長さや要素の数を取得する。
P-022 unique()
P-022: レシート明細データフレーム(df_receipt)の顧客ID(customer_id)に対し、ユニーク件数をカウントせよ。
len(df_receipt['customer_id'].unique())
unique()
:ユニークな要素の値(重複していない要素の値)のリストを返す。一次元のNumPy配列ndarray型。