🐼Pandas応用編|groupby・merge・グラフ描画まで使いこなす実践ガイド

IT・テクノロジー

🐼 Pandasを応用レベルで使えると、データ分析が一気に楽しくなる

Pythonでデータ分析や業務効率化をするとき、必ずと言っていいほど登場するのが Pandas(パンダス) です。基本的なデータフレームの作り方や読み込みは知っていても、「複数のデータをまとめて集計する」「複数のCSVを結合する」「グラフでパッと可視化する」といった応用テクニックを使いこなせると、業務スピードが何倍にも変わります。

売上データを担当者ごとに自動集計したり、複数のシステムから出てきたCSVを1つにまとめたり、Excelでは時間がかかる集計を数行のコードで終わらせたり。そんな未来を引き寄せるための応用テクを、動画の内容に沿って整理しました。✨

📊 groupbyでデータをまとめて集計する

「担当者ごと」「曜日ごと」「商品カテゴリごと」のように、ある列の値でグループ化して集計したいときに使うのが groupby です。たとえば8月の売上実績データから、担当者ごとの1日あたりの平均売上を出したいとします。

書き方はとてもシンプルで、df.groupby("担当者").mean() のように、第1引数にグループ化したい列名を指定し、続けて集計用のメソッドを呼び出すだけ。これだけで佐藤さんの平均、斉藤さんの平均、田中さんの平均がパッと表示されます。便利すぎますよね。🎯

🔢 使える集計関数いろいろ

  • 📈 mean():平均値
  • 🔝 max() / min():最大値・最小値
  • sum():合計
  • 🔢 count():件数

数値以外の列が混ざっているときは、numeric_only=True を指定すると数値列だけを対象に集計してくれます。エラーで止まらず、必要なデータだけスッキリ取り出せます。

⚠️ 欠損値(NaN)の扱いに注意

集計関数は、列ごとにNaNを除外してから計算します。たとえば金曜日の売上が1件だけ欠損していると、count() の結果も他の列より1件少なくなります。「数が合わない…」と思ったら、まずNaNの有無を疑ってみましょう。🧐

🔁 インデックス操作を自在に

データフレームのインデックスは、後から自由に変更できます。地味ですが、表計算で言う「並べ替え」「キー設定」に相当する大事な操作です。

  • 🆕 df.index = [...]:リストやSeriesでインデックスを丸ごと置き換え。
  • 🏷 df.columns = [...]:カラム名を一括変更(日本語→英語のリネームに便利)。
  • 🔑 df.set_index("列名", inplace=True):既存の列をインデックスに昇格。
  • 🔄 df.reset_index(drop=True, inplace=True):インデックスを0から振り直してリセット。

inplace=True を付けると元のデータフレーム自体が書き換わり、付けないと新しいデータフレームが返ってくる、という違いも押さえておくと混乱しません。

🔗 複数のデータフレームを結合する

📚 concat:縦・横にそのまま連結

pd.concat([df1, df2]) でデータフレームをそのまま連結できます。デフォルトは縦方向、axis=1 を指定すると横方向の連結になります。3つ以上のデータフレームをまとめて渡せるのもポイントです。

連結時に片方にしかない列がある場合、その部分はNaNで埋められます。「データが消えた」のではなく、「もう片方になかったから空欄」と考えると分かりやすいです。📝

🗝 merge:キーを使った賢い結合

SQLのJOINに相当するのが pd.merge。共通のキー(例:ユーザーID)を指定して、横方向にデータを結合します。

  • 🤝 inner(既定):両方にあるキーだけ残す。
  • ⬅️ left:左のデータをすべて残し、右にないキーはNaN。
  • ➡️ right:右のデータをすべて残し、左にないキーはNaN。
  • 🌐 outer:両方の和集合。どちらかにしかないキーもすべて残す。

使い方は pd.merge(df1, df2, on="ユーザーID", how="left") のように、on でキー、how で結合方式を指定。3つ以上を一度には結合できないので、2つずつ繰り返すのがコツです。🔁

🧪 mapとラムダ式でカスタム列を作る

「20歳以上なら成人、それ未満なら未成年」のような条件付きの新しい列を作りたいときは、map とラムダ式の組み合わせが強力です。

たとえば df["区分"] = df["年齢"].map(lambda x: "成人" if x >= 20 else "未成年") と書くだけで、年齢列の各値が順番にラムダ式に渡され、結果が新しい列として追加されます。Excelの IF 関数を一気に全行に適用するイメージですね。⚡

📈 データフレームから直接グラフを描く

分析結果は数値だけより、グラフで見せたほうが断然伝わります。Pandasにはデータフレームから直接グラフを描ける plot メソッドが用意されています。

使い方は df.plot(x="ユーザー", y="購入額", kind="bar") のように、X軸・Y軸の列と kind でグラフ種類を指定するだけ。kind="bar" なら棒グラフ、デフォルトは折れ線グラフになります。

日本語ラベルが文字化けする場合は、事前に pip install japanize-matplotlib しておき、import japanize_matplotlib を1行書くだけで解決。グラフが一気に読みやすくなります。🇯🇵

📚 Pandasを使いこなすためのおすすめ書籍

動画やブログで全体像をつかんだら、書籍で体系的に深掘りするのが上達への近道です。Pandasだけでなく、データ分析・可視化・機械学習との組み合わせまで一気に押さえると、実務での応用力が一段上がります。📈

🐼 Pandasの決定版テキスト

Pandasの作者自身が著者を務める世界的な定番書。データの前処理・集計・結合・可視化までを網羅し、業務で困ったときに辞書代わりに使える1冊です。

📊 実務でそのまま使える前処理レシピ

業務データにありがちな「欠損値」「日付処理」「結合」「集計」を、Pandasのメソッドベースでパターン化して解説。レシピ集として机に置いておきたい1冊です。

🤖 機械学習につなげたい人へ

Pandasで整えたデータを、scikit-learnで実際にモデル化する流れを学べる定番書。「集計の次のステップ」を狙う人に最適です。

🎨 データ可視化を一段上のレベルに

matplotlibやseabornを使った美しいグラフ作成を、Pandasと組み合わせて学べる1冊。「分析→可視化→共有」までの流れがスムーズになります。

🚀 業務効率化・自動化を狙う人へ

ExcelやCSV、Webスクレイピングと組み合わせて、Pandasで日々の業務を自動化する方法を学べる実践書。明日からのルーティンが軽くなります。

❓ よくある質問(FAQ)

🤔 Q1. groupbyで複数の列をキーにできますか?

はい、df.groupby(["担当者", "曜日"]) のようにリストで複数列を指定すると、組み合わせごとにグループ化されます。クロス集計に近いことが手軽にできます。

🔗 Q2. concatとmergeはどう使い分ければいい?

同じ形のデータをそのままつなげるなら concat、共通のキーで関連付けて結合するなら merge、と覚えると分かりやすいです。SQLに慣れている方には merge がJOINと同じ感覚で使えます。

⚠️ Q3. 欠損値(NaN)が混ざると集計結果が変になります

多くの集計関数はNaNを自動で除外するため、列ごとに件数や平均が変わることがあります。必要に応じて fillna() で値を埋めるか、dropna() で行を除外してから集計しましょう。

🐌 Q4. 大量データだと処理が遅いです

ベクトル化された操作(mapapply よりも純粋なPandas/NumPy演算)を使う、不要な列を早めに削る、データ型を最適化する、といった工夫で速くなります。それでも遅ければ Polars や Dask への移行も選択肢です。

🎨 Q5. グラフの日本語が文字化けします

matplotlib単体だと日本語フォントの設定が必要ですが、japanize-matplotlib をインストールして import japanize_matplotlib を1行書くだけで自動解決できます。手軽でおすすめです。

✨ まとめ:Pandas応用テクで「分析できる人」へ

Pandasの基本に groupby・concat・merge・map・plot を加えるだけで、扱えるデータの幅と分析の深さが一気に広がります。Excelで手作業していた集計やグラフ作成が、数行のコードで自動化できる。これが応用編の醍醐味です。🚀

最初は引数や使い分けで迷うかもしれませんが、書籍で体系的に学びながら手を動かせば、必ず体に染み込みます。今回紹介した書籍を相棒に、あなたのデータ活用スキルを次のステージへ引き上げてみてください。📚

コメント

タイトルとURLをコピーしました