ラムダ式の用法をマスターする上で、applyの知識をおさらいしておく。
apply
apply関数は、データフレームもシリーズも適用することができる関数。
似た関数にはmapやapplymapがある。mapはシリーズに使用、applymapはデータフレームの各要素に適用する。applyは各行・各列に適用させることができる。
import pandas as pd
import numpy as np
df = pd.DataFrame([[1,2,3], [4,5,6], [7,8,9]], columns=['A','B','C'])
print (df)
A B C
0 1 2 3
1 4 5 6
2 7 8 9
def add(x):
return x+10
df.apply(add)
A B C
0 11 12 13
1 14 15 16
2 17 18 19
特に指定なく使用すると、データフレーム全体に関数が適用される。
df['A'].apply(add)
0 11
1 14
2 17
Name: A, dtype: int64
列に対して適用すると、シリーズが帰ってくる。
ラムダ式で記述すると、こうなる。
df['A'].apply(lambda x: x+10)
0 11
1 14
2 17
Name: A, dtype: int64
かっこいい…。
よく使う引数、axisの挙動は
df.apply(np.sum, axis=0) # 行に適用(デフォルトはこちら)
A 12
B 15
C 18
dtype: int64
df.apply(np.sum, axis=1) # 列に適用
0 6
1 15
2 24
dtype: int64
applymap
applymapの特徴は、データフレームの要素に対して適用させるところ。そのため、データフレーム以外に用いることができない。applyはデータフレームの行や列に対して適用させるところが異なる。
そのためシリーズ(今回はデータフレームの列)に対してapplymapを適用すると、エラーになる。
df['A'].applymap(lambda x: x*2)
AttributeError: 'Series' object has no attribute 'applymap'
若干使いどころに困る。知識として覚えておく。