AI資格ドリル
資格を選ぶ

用語比較

groupbyのaggとtransformの違い|グループごとに1行へまとめるか、元と同じ行数で返すか(Python3データ分析)

groupby の agg はグループごとに要約値を出してグループの次元を減らし、transform はグループごとの計算をして、元と同じ index の結果を返します。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。

agg(aggregate)とtransformの要点

agg(aggregate)

グループごとに、合計や平均などの要約値を出す。結果の行数はグループの数になる。グループのキーは、既定で index に入る。

transform

グループごとの計算をして、元と同じ index の結果を返す。公式は cumsum() や diff() を例に挙げている。

違いを表で確認

比較軸agg(aggregate)transform
結果の行数グループの数になる元のデータと同じ
結果の indexグループのキー(as_index=True の既定)元のデータの index
公式の説明グループの次元を減らす(reduces the dimension)元と同じ index の結果を返す(like-indexed)
使いどころグループごとの合計・平均・件数を表にするグループ内の累積・差・標準化を、元の行に付ける

Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

種類ごとの合計を、一覧にしたい人

agg か sum() などを使います。グループの数だけの行になります。

02

グループ内の累積や差を、元の表の列として足したい人

transform 系の cumsum() や diff() を使います。元と同じ行数で返るので、列として足せます。

03

結果の行数が減って、元の表に戻せなくなった人

要約値を出す agg の結果になっています。元の行に付けたいなら、transform の形を選びます。

具体例で使い分ける

例 1

agg 系の sum はグループの数の行になる

公式の例の animals(kind が cat・dog・cat・dog の4行)に、animals.groupby("kind").sum() を使います。

  • 結果は、cat と dog の2行です。
  • cat は height 18.6・weight 17.8、dog は height 40.0・weight 205.5 です。
  • kind はグループのキーなので、index に入ります。as_index=False を付けると、列に出ます。

結論: 要約値を出す操作は、元の4行が、グループの数の2行になります。

例 2

transform 系の cumsum は元の行数のまま

公式の例の speeds(falcon・parrot・lion・monkey・leopard の5行)に、groupby("class")["max_speed"].cumsum() を使います。

  • 結果は、falcon 389.0、parrot 413.0、lion 80.2、monkey NaN、leopard 138.2 です。
  • 行は5行のままで、index も元の動物の名前です。
  • bird のグループの中で、falcon の次の parrot は 389.0 + 24.0 = 413.0 と累積されます。

結論: transform の形は、元の行に1対1で対応するので、列として足せます。

例 3

agg は列ごとに別の集計を指定できる

公式の例の grouped に、grouped.agg({"C": "sum", "D": "std"}) を使います。

  • dict で、C 列は合計、D 列は標準偏差を指定します。
  • 結果は、bar が C 0.392940・D 1.366330、foo が C -1.796421・D 0.884785 です。

結論: agg は、1回の呼び出しで、列ごとに集計の種類を変えられます。

問題文から答えを選ぶ手順

  1. 1

    結果の行数を決める

    グループごとに1行の表なら agg、元の行数のままなら transform の形です。

  2. 2

    元の表に列として足すかを決める

    足すなら、元と同じ index で返る transform の形です。

  3. 3

    列ごとの集計の違いを決める

    列ごとに集計を変えるなら、agg に dict を渡します。

試験での見分け方

  • 1グループごとの要約値を出すときは、agg を使う。
  • 2グループ内の計算を、元の行と同じ index で返すときは、transform の形を使う。
  • 3agg の結果は、グループのキーが index に入る(as_index=True の既定)。
  • 4グループのキーを列で受け取りたいときは、as_index=False を指定する。

誤答しやすい選択肢

groupby の結果は、いつも元の行数のままと考える

修正: 要約値を出す操作は、グループの数の行になります。元の行数で返るのは、transform の形の操作です。

groupby の結果の kind が、列として残ると考える

修正: 既定の as_index=True では、グループのキーは index に入ります。列にしたいなら as_index=False を使います。

cumsum() が、全体の累積だと考える

修正: groupby のあとの cumsum() は、グループの中で累積します。公式の例では、lion の 80.2 から数え直されます。

確認問題

Q1公式の用語で、グループごとの要約値を出す操作は?

答え: Aggregation

公式は、Aggregation を、グループの次元を減らす操作としています。

Q2元と同じ index の結果を返す操作は?

答え: Transformation

公式は、Transformation の結果が、グループ化した対象と同じ index になると書いています。

Q3groupby の結果でキーを列にする引数は?

答え: as_index=False

公式は、as_index=False でキーが列に含まれると書いています。

Q4公式が transform の例に挙げる、グループ内の累積の関数は?

答え: cumsum()

公式は、cumsum() と diff() を例に挙げています。

到達チェック

  • agg の結果の行数がグループの数になることを言える
  • transform の結果が元と同じ index であることを言える
  • as_index=False の役割を説明できる
  • cumsum() が、グループ内の累積であることを答えられる

同じ資格で次に知りたいこと

よくある質問

Qaggとtransformの違いは?

A

agg はグループごとに要約値を出し、行数がグループの数になります。transform は元と同じ index の結果を返します。

Qgroupbyのあとにkindが列に残らないのはなぜですか?

A

既定の as_index=True では、グループのキーが index に入るためです。列にするには as_index=False を指定します。

Qグループ内の累積を出すには?

A

groupby のあとに cumsum() を使います。公式は、cumsum() と diff() を transform の例に挙げています。

Qデータ分析試験の範囲?

A

本サイトの第4章 pandas で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。

次に見る比較

執筆: AI資格ドリル編集部(運営者情報を見る)