カテゴリ: Python 更新日: 2026/03/05

Pythonで辞書の値を集計する方法(Counter / groupbyの活用)初心者向け完全ガイド

Pythonで辞書の値を集計する方法(Counter / groupbyの活用)
Pythonで辞書の値を集計する方法(Counter / groupbyの活用)

先生と生徒の会話形式で理解しよう

生徒

「Pythonで辞書の値を集計する方法ってありますか?例えば、同じ値が何回出てくるか数えたいです。」

先生

「はい、そんなときはcollections.Counteritertools.groupbyを使うと便利ですよ。」

生徒

「その2つはどう違うんですか?」

先生

Counterは出現回数を簡単に数えるときに、groupbyはデータをグループ分けして集計するときに使います。それぞれの使い方を見ていきましょう!」

1. collections.Counterで値の出現回数を集計する

1. collections.Counterで値の出現回数を集計する
1. collections.Counterで値の出現回数を集計する

Pythonで「どのデータが何個あるか」を調べたいときに最も便利なのが、標準ライブラリのcollectionsモジュールに含まれるCounter(カウンター)です。 これは、リストや辞書の中身を自動でスキャンし、重複する要素を数え上げてくれる「集計専用の道具」のようなものです。

プログラミング未経験の方でも使い方は簡単です。まずは、辞書から「値(バリュー)」の部分だけを取り出して、Counter()に放り込んでみましょう。


from collections import Counter

# 1. 元となるデータ(辞書形式:キーはユーザー名、値は好きな色)
user_preferences = {
    "田中": "赤",
    "佐藤": "青",
    "鈴木": "赤",
    "高橋": "緑",
    "伊藤": "青"
}

# 2. 辞書の値(色)だけを取り出してCounterに渡す
# .values() を使うことで、「赤」「青」といった値だけを抽出できます
color_counts = Counter(user_preferences.values())

# 3. 結果を表示する
print(color_counts)

Counter({'赤': 2, '青': 2, '緑': 1})

実行結果を見ると、'赤': 2 のように、どの値が何回出現したかが一目でわかります。 通常、これを出そうとすると「for文で1つずつ取り出して、変数に足していく……」という複雑な処理が必要ですが、Counterを使えばたった1行で集計が完了します。

この機能は、アンケート結果の集計や、ログファイルに特定のキーワードが何回出てきたかを調べる際など、実務でも非常に頻繁に利用されます。

2. Counterの便利なメソッド:要素の集計とランキング

2. Counterの便利なメソッド:要素の集計とランキング
2. Counterの便利なメソッド:要素の集計とランキング

Pythonのcollections.Counterを使いこなす上で、最も強力で頻繁に使われるのがmost_common()メソッドです。このメソッドを使えば、バラバラに並んだデータの中から「どの要素が何回登場したか」を、出現回数の多い順(降順)で瞬時にリスト化してくれます。

プログラミング未経験の方でも分かりやすいように、果物のカゴの中身を数える簡単なサンプルを見てみましょう。


from collections import Counter

# 集計したいデータのリスト
fruits = ['りんご', 'バナナ', 'りんご', 'みかん', 'バナナ', 'りんご']
counter = Counter(fruits)

# すべての要素を出現回数順に取得
print("全ランキング:", counter.most_common())

# 最も多く出現した上位1つだけを取得
print("1位のみ:", counter.most_common(1))

全ランキング: [('りんご', 3), ('バナナ', 2), ('みかん', 1)]
1位のみ: [('りんご', 3)]

実行結果を見ると、自動的に回数が多い順に並んでいるのがわかります。引数(カッコ内の数字)を指定することで、「上位3位まで」や「もっとも多いもの1つだけ」といった具合に、取得する件数を自由にコントロールできるのが非常に便利です。

この機能は、アンケート結果の集計や、文章の中でよく使われる単語の分析など、膨大なデータから「人気のあるもの」を探し出す際に欠かせないテクニックです。

3. itertools.groupbyでグループごとに集計する

3. itertools.groupbyでグループごとに集計する
3. itertools.groupbyでグループごとに集計する

groupbyは、指定したキーでデータをまとめる機能があります。使う前にデータをソートする必要があります。


from itertools import groupby

data_items = [
    {"色": "赤", "数量": 5},
    {"色": "青", "数量": 3},
    {"色": "赤", "数量": 2},
    {"色": "青", "数量": 4},
    {"色": "緑", "数量": 1},
]

data_items.sort(key=lambda x: x["色"])

grouped = groupby(data_items, key=lambda x: x["色"])
for color, items in grouped:
    total = sum(item["数量"] for item in items)
    print(color, total)

赤 7
青 7
緑 1

このように、groupbyでは「色」ごとの数量合計を計算できます。

4. Counterとgroupbyの使い分け

4. Counterとgroupbyの使い分け
4. Counterとgroupbyの使い分け
  • Counter:単純に値の出現回数を数えたいとき
  • groupby:特定のキーでまとめて合計や平均などを出したいとき

例えば「どの色が何回出たか」ならCounter、「どの色の数量合計がいくつか」ならgroupbyが適しています。

5. 実用例:アンケート結果の集計

5. 実用例:アンケート結果の集計
5. 実用例:アンケート結果の集計

例えば、アンケートで好きな色を答えてもらい、その結果を集計する場合、Counterを使うと簡単です。


votes = ["赤", "青", "赤", "緑", "青", "青"]
result = Counter(votes)
print(result)

Counter({'青': 3, '赤': 2, '緑': 1})

この結果を棒グラフにして可視化すれば、データ分析にも応用できます。

6. 実用例:売上データのグループ集計

6. 実用例:売上データのグループ集計
6. 実用例:売上データのグループ集計

商品ごとの売上合計を出す場合はgroupbyが便利です。


sales = [
    {"商品": "りんご", "売上": 100},
    {"商品": "バナナ", "売上": 80},
    {"商品": "りんご", "売上": 120},
    {"商品": "バナナ", "売上": 90},
]

sales.sort(key=lambda x: x["商品"])
for product, items in groupby(sales, key=lambda x: x["商品"]):
    total_sales = sum(item["売上"] for item in items)
    print(product, total_sales)

りんご 220
バナナ 170

このように、groupbyを使うと複数の条件で柔軟に集計できます。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
カテゴリの一覧へ
新着記事
New1
Python
PythonでREST APIを作る方法!初心者向けFastAPI入門|Python API開発の基本
New2
PHP
PHPのコード品質向上ツール完全解説!PHPStan(ピーエイチピースタン)とPHPCS(ピーエイチピーシーエス)で初心者でも安全にデバッグしよう
New3
Python
Pythonでデータベースのログを記録・監視する方法を完全解説!初心者向けデータベースログ管理入門
New4
PHP
PHPのログファイルを活用したエラートラッキング完全ガイド|初心者でもわかるPHPデバッグ入門
人気記事
No.1
Java&Spring記事人気No1
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.2
Java&Spring記事人気No2
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
No.3
Java&Spring記事人気No3
Python
Pythonのインストール&環境構築!Windows・Mac・Linuxでの手順を初心者向けに解説
No.4
Java&Spring記事人気No4
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.5
Java&Spring記事人気No5
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.6
Java&Spring記事人気No6
PHP
PHPの特殊文字とエスケープ処理を完全ガイド!初心者向けにhtmlspecialcharsとhtmlentitiesをやさしく解説
No.7
Java&Spring記事人気No7
Python
Pythonでデータベースの接続プールを使う方法を徹底解説!初心者向けPythonデータベース接続プール入門
No.8
Java&Spring記事人気No8
Python
Pythonで文字列が数値か判定する方法!isdigit()・isnumeric()の違い