やましなぶろぐ

pandas.DataFrame.transformを使いこなしたい

groupby.aggの結果をDataFrameに追加する

🕒 Last mod: 2021-01-06


1. transformの有用性

transformの活用方法がいまいち想像できずに放置していました。

pysparkでWindow.partitionByを使用して便利だなと感じてpandasでもできないかな?と調べたところtransformで実現できることが分かりました。

transformの実例を示しながら整理したいと思います。

2. transformで実現できること

groupby.aggの結果をデータフレームに追加したいことが多々あります。

transformを使用しない場合には下記のような流れで実現します。

  1. groupby.aggを計算した中間DataFrameを作成する

  2. 元DataFrameと中間DataFrameをLeft joinする。

中間DataFrameを作成するところが無駄なことと、Joinするのが面倒です。

transformを使用することでこのような加工を簡単に実現できます。

3. 実例

sample.py
import pandas as pd
from sklearn import datasets

boston = datasets.load_boston()
boston_df = pd.DataFrame(
    boston.data,
    columns=boston.feature_names,
)

boston_df = (
    boston_df
    .assign(
        CRIM_SUM_BY_CHAS = (
            boston_df
            .groupby('CHAS')['CRIM']
            .transform(
                sum
            )
        )
    )
)