基本形
DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), by_row='compat', **kwargs)
概要
- for文を使わなくてもデータフレームの行ごと、もしくは列ごとに関数を適用できる
以下コードは公式からそのまま使ってます
# 使用するデータフレームの例
>>> df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B'])
>>> df
A B
0 4 9
1 4 9
2 4 9
パラメータ
func:関数
適用する関数
- そのまま関数名を置け、lambda式もおける
>>> df.apply(np.sqrt)
A B
0 2.0 3.0
1 2.0 3.0
2 2.0 3.0
axis:(0 か 'index', 1 か 'columns')
関数を適用する方向
- デフォルト値:0
- 0 か 'index':それぞれの列毎に適用。行方向。
- 1 か 'columns':それぞれの行毎に適用。列方向。
>>> df.apply(np.sum, axis=0)
A 12
B 27
dtype: int64
>>> df.apply(np.sum, axis=1)
0 13
1 13
2 13
dtype: int64
raw:bool
対象がシリーズ型かndarray型か
- デフォルト値:False
- False:各行か各列をシリーズ型で関数に渡す
- True:Numpyのndarray形式のオブジェクトを受け取る。Numpyの関数を使用する際高速になる
result_type:(‘expand’, ‘reduce’, ‘broadcast’, None)
axis = 1の時のみ発動
- デフォルト値:None
- 'expand':リストをシリーズ、データフレームに変更
- 'reduce':シリーズをリストに変更
- 'broadcast':元のインデックスや列を保持したデータフレーム型を返す
- None:戻り値は関数に依存。リスト型はシリーズ型で返されるが、関数がシリーズ型を返す場合列として返す
>>> df.apply(lambda x: [1, 2], axis=1)
0 [1, 2]
1 [1, 2]
2 [1, 2]
dtype: object
>>> df.apply(lambda x: [1, 2], axis=1, result_type='expand')
0 1
0 1 2
1 1 2
2 1 2
>>> df.apply(lambda x: pd.Series([1, 2], index=['foo', 'bar']), axis=1)
foo bar
0 1 2
1 1 2
2 1 2
>>> df.apply(lambda x: [1, 2], axis=1, result_type='broadcast')
A B
0 1 2
1 1 2
2 1 2
args:tuple
関数に渡す位置引数
by_row:False か 'compat'
関数がリスト型や辞書型の時にのみ発動。
関数を各要素に対して適用するか、全体に一度に適用するかを決定
- デフォルト値:'compat'
- 'compat':各要素に対して適用。一度関数をPandasのメソッドに変換を試みて、それが出来ない場合にapplyを再度呼び出し、それでもダメならFalseの処理
- False:全体に一度に適用
**kwargs
関数に渡す追加のキーワード引数
戻り値
シリーズかデータフレーム
ドキュメント