どういうこと?
以下のような状況のとき、
import pandas as pd
df = pd.DataFrame({'x': [1, 2, 3, 4], 'y': ['A', 'B', 'C', 'D']})
def f1(a, b):
return a * b
def f2(a, b, c):
return a * b * c
f1
や f2
を apply
で列に適用したいということです。
どうすれば?
公式pandas.Series.applyリファレンス の Examples を見ればOKです。
あえて上記の例にあてはめると次のようになります。
2引数の関数をSeries
へ与える場合
args
にタプルで追加の引数を与えます。
df.x.apply(f1, args=(2,))
または、 apply
にキーワード引数で与えます。
df.x.apply(f1, b=2)
出力は
0 2
1 4
2 6
3 8
Name: x, dtype: int64
引数が3つの場合
この場合も同様です。
df.x.apply(f2, args=(2, 3))
# または
df.x.apply(f2, b=2, c=3)
出力は
0 6
1 12
2 18
3 24
Name: x, dtype: int64
各列へ一度に適用する場合
df.apply(f1, args=(2,))
# または
df.apply(f1, b=2)
出力
x y
0 2 AA
1 4 BB
2 6 CC
3 8 DD