【毎日Python】Pythonでデータフレームの要素に関数を適用する方法|DataFrame.applymap

applymap
毎日Python/こつこつPython

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メソッドを使用するとよいでしょう。

関連メソッド

【毎日Python】Pythonでシリーズの各要素に関数を適用する方法|Serise.apply