0Pricing
Learn AI with Python · レッスン

GroupBy と集計

df.groupby()、agg()、transform()、apply()、Named Aggregation による名前付き集計を学びます。

「GroupBy と集計」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

分割・適用・結合の考え方

GroupByは、分割・適用・結合のパターンに従います。キーで行をグループに分け、各グループに関数を適用し、その結果を1つのDataFrameに結合します。ほとんどの分析用集計を支える仕組みです。

import pandas as pd
df = pd.DataFrame({
    "dept": ["A", "A", "B", "B", "B"],
    "salary": [50, 70, 40, 60, 80],
})

基本のgroupby

df.groupby("col")はグループ化されたオブジェクトを作成します。.mean()のような集約処理を連結すると、グループごとに1つの値が計算されます。

print(df.groupby("dept")["salary"].mean())
# dept
# A    60.0
# B    60.0

複数の集約

.agg([...])を使うと、複数の集約処理を一度に呼び出せます。関数ごとに1列が生成されます。

print(df.groupby("dept")["salary"].agg(["mean", "min", "max", "count"]))

列ごとの集約辞書

.aggに辞書を渡すと、列ごとに異なる関数を適用できます。

df["bonus"] = [5, 7, 4, 6, 8]
out = df.groupby("dept").agg({"salary": "mean", "bonus": "sum"})
print(out)

名前付き集約

名前付き集約では、pd.NamedAgg構文を使って出力列に分かりやすい名前を付けられます。これにより、分かりにくい多階層の列ヘッダーを避けられます。

out = df.groupby("dept").agg(
    avg_salary=("salary", "mean"),
    total_bonus=("bonus", "sum"),
)
print(out)

複数のキーによるグループ化

列のリストを渡すと、複数のキーで一度にグループ化できます。その結果、階層構造(MultiIndex)が生成されます。

df["level"] = ["jr", "sr", "jr", "sr", "sr"]
print(df.groupby(["dept", "level"])["salary"].mean())

transform:同じ形状の結果

.transform()は、グループごとに1行ではなく、元の行に対応した結果を返します。グループの統計量を新しい列として追加するのに最適です。

df["dept_avg"] = df.groupby("dept")["salary"].transform("mean")
print(df[["dept", "salary", "dept_avg"]])

正規化に使うtransform

transformは各行に結果をブロードキャストして戻すため、グループ内で正規化できます。たとえば、グループの平均を引く処理が可能です。

df["centered"] = df["salary"] - df.groupby("dept")["salary"].transform("mean")
print(df[["dept", "salary", "centered"]])

独自の処理に使うapply

.apply()は、各グループをサブDataFrameとして関数に渡します。組み込みの集約では表現できない処理に使います。たとえば、グループごとに上位N行を返す処理などです。

top = df.groupby("dept").apply(lambda g: g.nlargest(1, "salary"))
print(top[["dept", "salary"]])

aggとtransformとapplyの違い

aggは各グループを1つの値に集約します。transformは元の各行に対応する値を返します。applyは柔軟ですが遅い汎用手段です。明確さと速度のため、最も目的に合ったものを選びましょう。

reset_indexによるグループ解除

GroupByの結果では、キーがインデックスに入ります。.reset_index()を呼び出すと、キーを通常の列に戻せます。多くの後続処理では、この形式が想定されています。

flat = df.groupby("dept")["salary"].mean().reset_index()
print(flat)
#   dept  salary
# 0    A    60.0
# 1    B    60.0

確認問題

groupbyの理解度を確認しましょう。

まとめ

GroupByの要点:

  • df.groupby("col")による分割・適用・結合
  • 複数の統計量には.agg([...])と辞書または名前付き集約を使う
  • .transform()は元の形状に対応した結果を返す
  • グループごとの任意の処理には.apply()を使う
  • グループキーを列に戻して平坦化するには、必ず.reset_index()を使う

よくある質問

「GroupBy と集計」レッスンは無料ですか?

はい。「GroupBy と集計」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「GroupBy と集計」で何を学びますか?

df.groupby()、agg()、transform()、apply()、Named Aggregation による名前付き集計を学びます。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「GroupBy と集計」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. GroupBy と集計
  2. ピボットテーブルとクロス集計
  3. 高度なマージと結合
  4. Pandas の時系列データ
← Learn AI with Pythonに戻る