Pythonでデータフレームの各要素に関数を適用する方法です。
使用するのは、Pythonのデータフレームのapplymapメソッドです。
このようなデータフレームを作成します。
カラム名は日付で、カラム名は名前とします。
import pandas as pd
df = pd.DataFrame([[11000, 6000, 8000],
[5000, 12000, 6000],
[4000, 5000, 9000]],
columns=['1日', '2日', '3日'],
index=['A', 'B', 'C'] )
df
まず、このような値を2倍にするdouble(ダブル)という関数を作ります。
applymapの引数にダブルを指定して実行します。
def double(x):
return x * 2
df.applymap(double)
各値が2倍になりました。
次に、同様の処理をラムダ関数でも試してみましょう。
実行します。
df.applymap(lambda x : x * 2)
先程と同様に各値が2倍になりました。
次に、ラムダ関数にif文を使ってみましょう。
if文で数が1万以上の場合のは1万円以上、それ以外の場合には1万円未満を表示する処理を指定します。
実行します。
df.applymap(lambda x : '1万円以上' if x >= 10000 else '1万円未満')
それぞれ1万円以上または1万円未満で表示できました。
最後に、if文で価格のランクをつける関数f_rankを適用させてみましょう。
AからCまで価格に応じて分けるものとします。
実行します。
def f_rank(x):
if x >= 20000:
return 'S'
elif x >= 10000:
return 'A'
elif x >= 5000:
return 'B'
else:
return 'C'
df.applymap(f_rank)
AからCまででランク付けができました。
なお、applymapメソッドに似たメソッドでapplyメソッドがあります。
applymapメソッドはデータフレームのみに適用するのに対し、applyメソッドはデータフレームとシリーズ両方に適用されます。
def f_tax(x, tax):
return x * tax + x
df.apply(f_tax, args=(0.1,))
なお、applymapメソッドには関数の引数を渡す手段がありません。
このように引数をもつ関数を適用したい場合は、applyメソッドを使用するとよいでしょう。