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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- GroupBy と集計
- ピボットテーブルとクロス集計
- 高度なマージと結合
- Pandas の時系列データ