【Python】Pandas ~ apply / transform ~

■ はじめに

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