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

applymap
こつこつ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

未経験からはじめるPython学習「キノクエスト」 キノクエスト
  • スキルアップしたいけど何からはじめればよいかわからない…
  • プログラミングスクールに入りたいけど料金が高い…
  • プログラミングを学んでも業務やキャリアに活かせるか不安…

キノクエストは、このような悩みを持つ方にぴったりのプログラミング学習サービスです。
国内最大級のプログラミング学習系YouTubeチャンネル「キノコード」が提供しているから、未経験者にもわかりやすく質の高い学習体験を実感していただけます。

キノクエスト