■ はじめに
Pandas の apply() と transform() について、 触れる機会があったので、メモしておく。
目次
【1】apply() 【2】transform()
【1】apply()
* 行全体や列全体に対して、同じ操作をしたいときに使用する
API
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html
サンプル
import pandas as pd data_frame = pd.DataFrame([ ['Mike', 21], ['Tom', 19], ['Jimmy', 34], ], columns=["name", "age"]) print(data_frame) print('**************') data_frame['name'] = data_frame['name'].apply( lambda x: x if (x == 'Mike') else (x.lower())) data_frame['age'] = data_frame['age'].apply( lambda x: x + 1) print(data_frame)
出力結果
name age 0 Mike 21 1 Tom 19 2 Jimmy 34 ************** name age 0 Mike 22 1 tom 20 2 jimmy 35
参考文献
https://note.nkmk.me/python-pandas-map-applymap-apply/
【2】transform()
* グループごとの統計情報を使ってすべての行を集計したい場合に使用する
API
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.transform.html
サンプル
import pandas as pd data_frame = pd.DataFrame([ ['Tokyo', '2021-07-01', 28], ['Tokyo', '2021-07-02', 35], ['Tokyo', '2021-07-03', 34], ['Osaka', '2021-07-01', 27], ['Osaka', '2021-07-02', 40], ['Osaka', '2021-07-03', 38], ], columns=["city", "date", "temperature"]) print(data_frame) print('**************') data_frame['mean'] = \ data_frame.groupby(['city'])['temperature'].transform(lambda x: x.mean()) print(data_frame)
出力結果
city date temperature 0 Tokyo 2021-07-01 28 1 Tokyo 2021-07-02 35 2 Tokyo 2021-07-03 34 3 Osaka 2021-07-01 27 4 Osaka 2021-07-02 40 5 Osaka 2021-07-03 38 ************** city date temperature mean 0 Tokyo 2021-07-01 28 32.333333 1 Tokyo 2021-07-02 35 32.333333 2 Tokyo 2021-07-03 34 32.333333 3 Osaka 2021-07-01 27 35.000000 4 Osaka 2021-07-02 40 35.000000 5 Osaka 2021-07-03 38 35.000000
参考文献
https://qiita.com/greenteabiscuit/items/132e0f9b1479926e07e0
https://toonanote.com/pandas-%E3%81%AE-apply-%E3%81%A8-transform-%E3%81%AE%E9%81%95%E3%81%84%E3%82%92%E7%9F%A5%E3%82%8B/
関連記事
Pandas ~入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/22/014957
Pandas ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/10/14/000000
Pandas ~ 基本編 / データフレーム ~
https://dk521123.hatenablog.com/entry/2021/07/25/000000
Pandas ~ 基本編 / データのクレンジング ~
https://dk521123.hatenablog.com/entry/2020/04/06/235555
Pandas ~ データ集計編 ~
https://dk521123.hatenablog.com/entry/2021/04/07/105858
Pandas ~ データ連結 / 結合編 ~
https://dk521123.hatenablog.com/entry/2021/07/26/000000
Python ~ 基本編 / CSV ~
https://dk521123.hatenablog.com/entry/2019/11/07/214108
NumPy ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2018/03/28/224532
Python 3 エンジニア認定データ分析試験
https://dk521123.hatenablog.com/entry/2020/12/12/000000