こんにちは,shun(@datasciencemore)です!!
今回はapply(シリーズの行処理)について学習していきます.
applyは,データフレームの各行に対して関数を適用するメソッドです.
イメージとしてはこのようになります.
データフレームと関数をapplyに適用すると,データフレームの各行に関数を適用した結果が出力されます.
0.準備
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# パッケージ読み込み import numpy as np import polars as pl import seaborn as sns # データフレームの表示行数を指定 pl.Config.set_tbl_rows(8) # データ読み込みと列選択(メソッドチェーン) df = \ pl\ .from_pandas(sns.load_dataset("diamonds"))\ .select("depth", "color") |
1.apply(データフレームの行処理)の基本
例えば,以下のデータフレームと関数を考えます.
データフレーム:df(ダイヤモンドデータ)のdepth列,color列
関数:color列がEであれば,depth列の数値を,color列がIIであれば0を,そうでなければ1と出力する.
このデータフレームと関数をapplyに適用すると,このようなシリーズを出力します.
1 2 3 4 5 6 7 8 9 10 11 |
# 関数 # "E" ⇒depth列 # "I" ⇒0 # それ以外⇒1 def func(x): if x[1] == "E": return x[0] elif x[1] == "I": return 0 else: return 1 |
1 2 |
# apply適用 df.apply(func).to_series() |
2.apply(データフレームの行処理)とwith_columns
シリーズの行処理だけでなく、データフレームの行処理でも、applyはwith_columnsと相性がよく,併用することが多いです.
例えば,このように条件が複数あるような処理についてもapplyとwith_columnsを併用すれば,比較的簡単にコーディングすることができます.
今回は,with_columnsを使用して先程の処理(Eであればdepth列を,Iであれば0を、それ以外であれば1と出力する.)によって得たシリーズを,dfの新しい列としてあげましょう.
1 2 3 4 5 |
# dfにfuncを適用した結果を新しい列に格納 df.with_columns( color_rev = df.apply(func).to_series() ) |
上の処理は、以下のようにwith_columnsとwhenを利用してもOKです。
1 2 3 4 5 6 7 8 9 |
# applyを使用しないでwhenを使ってもOK df.with_columns( color_rev = pl.when(pl.col("color") == "E") .then(pl.col("depth")) .when(pl.col("color") == "I") .then(0) .otherwise(1) ) |
まとめ
今回はapply(データフレームの行処理)について学習してきました.
- apply(データフレームの行処理)の基本
- apply(データフレームの行処理)とwith_columns
apply(シリーズの行処理)と同様,apply(データフレームの行処理)も最初は概念を理解するのが難しいですが,慣れるとfor文よりも楽にコーディングできて非常に便利です.
使いこなせるように練習しましょう!
それでは,お疲れさまでした!!