カテゴリ: Python 更新日: 2026/07/06

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でデータをグループ化して集計する方法

Pythonで「同じ属性を持つデータごとにまとめたい」ときに非常に便利なのが、標準ライブラリのitertools.groupbyです。例えば、売上データから「色ごと」や「カテゴリごと」に合計値を算出したい場合に役立ちます。

注意点: groupbyを使用する際は、あらかじめ集計したい項目(キー)でデータをソート(並べ替え)しておく必要があります。並んでいない状態だと、同じグループとして認識されないためです。


from itertools import groupby

# 1. 元となるデータ(リストの中に辞書が入っている形式)
data_items = [
    {"色": "赤", "数量": 5},
    {"色": "青", "数量": 3},
    {"色": "赤", "数量": 2},
    {"色": "青", "数量": 4},
    {"色": "緑", "数量": 1},
]

# 2. 集計したい「色」を基準に、データを並べ替える(必須ステップ!)
data_items.sort(key=lambda x: x["色"])

# 3. groupbyで色ごとにグループ化
grouped = groupby(data_items, key=lambda x: x["色"])

# 4. ループを使って各グループの合計を計算
for color, items in grouped:
    # 各グループ(items)の中にある「数量」を取り出して合計する
    total = sum(item["数量"] for item in items)
    print(f"{color}の合計数量: {total}")

赤の合計数量: 7
青の合計数量: 7
緑の合計数量: 1

このプログラムでは、バラバラだったデータを一度「赤・赤・青・青・緑」のように整列させ、その後にgroupbyが同じ色の塊を見つけて計算を行っています。プログラミング未経験の方でも、この「ソートしてからまとめる」という2ステップを意識するだけで、大量のデータを効率よく集計できるようになります。

4. Counterとgroupbyの使い分け:どちらを使うべき?

4. Counterとgroupbyの使い分け:どちらを使うべき?
4. Counterとgroupbyの使い分け:どちらを使うべき?

データの個数を数える「集計」作業において、Pythonには便利なツールが2つあります。それがcollections.Counterpandas.groupbyです。初心者の方が迷いやすいこの2つの違いを、身近な例で分かりやすく解説します。

使い分けの判断基準

  • Counter:単純に「何が、何個あるか」だけをサクッと知りたい時に最適です。
  • groupby:数えるだけでなく「合計金額」や「平均点」など、他のデータと組み合わせて計算したい時に必須となります。

初心者向けの具体例:お買い物リストで比較

例えば、「リンゴ、バナナ、リンゴ」という購入リストがあった場合で考えてみましょう。


# 1. Counterの場合:個数だけを数える
from collections import Counter
items = ["リンゴ", "バナナ", "リンゴ"]
print(Counter(items))
# 結果:リンゴが2個、バナナが1個とわかります

# 2. groupbyの場合:個数に加えて「合計金額」なども計算できる
import pandas as pd
df = pd.DataFrame({
    "商品": ["リンゴ", "バナナ", "リンゴ"],
    "価格": [100, 150, 100]
})
# 商品ごとにグループ化して、価格の合計を出す
print(df.groupby("商品")["価格"].sum())
# 結果:リンゴの合計は200円、バナナは150円と計算できます

このように、「出現回数」という1つの指標だけを見たいならCounter「グループごとの詳細な統計(合計や平均)」を出したいならgroupby、と覚えるのが最もシンプルで効率的です。データ分析の現場では、まずCounterでデータの全体像を把握し、深掘りが必要な場合にgroupbyへ移行するという流れがよく使われます。

5. 実用例:アンケート結果の集計とデータ分析

5. 実用例:アンケート結果の集計とデータ分析
5. 実用例:アンケート結果の集計とデータ分析

PythonのCounterが最も威力を発揮するのは、バラバラな回答データから「何がいくつあるか」を瞬時に特定したいときです。例えば、イベントの来場者に「好きな色」をアンケートした結果を整理するシーンをイメージしてみましょう。

プログラミングが初めての方でも、リスト(データのまとまり)をCounter()に渡すだけで、自動的に重複を数え上げて辞書形式にまとめてくれるので、複雑な計算コードを書く必要はありません。


from collections import Counter

# アンケートの生データ(回答順に並んでいるイメージ)
votes = ["赤", "青", "赤", "緑", "青", "青", "黄", "赤", "青"]

# Counterを使って一瞬で集計!
result = Counter(votes)

print("--- 集計結果 ---")
print(result)

# 特に多い項目だけを取り出すことも可能
print(f"一番人気の色は: {result.most_common(1)[0][0]} です")

--- 集計結果 ---
Counter({'青': 4, '赤': 3, '緑': 1, '黄': 1})
一番人気の色は: 青 です

このように、Counterを使えば「誰が何に投票したか」という膨大なテキストデータから、マーケティングに役立つ統計情報をわずか数行で抽出できます。この集計結果を棒グラフなどの図表に変換すれば、視覚的なデータ分析レポートも簡単に作成できるようになります。

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を使うと複数の条件で柔軟に集計できます。

まとめ

まとめ
まとめ

Pythonで辞書の値を集計する重要性の振り返り

本記事では、Pythonで辞書の値を集計する方法として、collectionsのCounterとitertoolsのgroupbyの使い方について詳しく解説してきました。データ集計はプログラミングの中でも非常に重要な分野であり、初心者の方でも早い段階で理解しておくことで、データ分析や業務効率化のスキルが大きく向上します。

特にPythonはデータ処理に強い言語として知られており、辞書やリストといった基本的なデータ構造と、Counterやgroupbyのような標準機能を組み合わせることで、複雑な集計処理をシンプルに実装できます。今回学んだ内容は、アンケート集計やログ分析、売上データの整理など、実務でも頻繁に利用される重要なテクニックです。

Counterによるシンプルな出現回数の集計

collections.Counterは、Python初心者でもすぐに使える非常に便利な集計ツールです。リストや辞書の値をそのまま渡すだけで、どの要素が何回出現したかを自動的にカウントしてくれるため、for文や条件分岐を自分で書く必要がありません。

また、most_commonメソッドを使うことで、出現回数の多い順に並べ替えたり、ランキング形式で結果を取得したりすることもできます。これにより、人気ランキングの作成や頻出データの分析など、実践的な処理が簡単に行えるようになります。

サンプルコードで理解するCounterの基本

以下は、辞書の値を使って出現回数を集計する基本的なサンプルコードです。初心者の方はこの形をテンプレートとして覚えておくと便利です。


from collections import Counter

data = {
    "A": "赤",
    "B": "青",
    "C": "赤",
    "D": "緑",
    "E": "青"
}

result = Counter(data.values())

print(result)

このように、valuesを使って値だけを取り出し、Counterに渡すだけで簡単に集計が完了します。Pythonのデータ集計処理の中でも、最も基本でありながら強力な方法の一つです。

groupbyを使った応用的なデータ集計

一方で、itertools.groupbyは単純なカウントだけでなく、グループごとの合計や平均など、より高度な集計を行いたい場合に適しています。特に複数のデータ項目を持つ場合や、売上や数量の合計を計算する場合に非常に役立ちます。

ただし、groupbyを使う際には事前にデータをソートする必要がある点に注意が必要です。このステップを忘れると、正しくグループ化されないため、初心者の方は必ず意識しておきましょう。

サンプルコードで理解するgroupbyの使い方

以下は、商品ごとの売上を集計するシンプルな例です。実務でもよく使われるパターンなので、しっかり理解しておきましょう。


from itertools import groupby

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

sales.sort(key=lambda x: x["商品"])

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

このように、groupbyを使うことで「商品ごとの売上合計」といった実務的な集計処理を効率よく実装できます。データ分析や業務システム開発において非常に重要なテクニックです。

Counterとgroupbyの使い分けのポイント

Pythonで辞書やリストの値を集計する際には、目的に応じてCounterとgroupbyを使い分けることが重要です。単純に出現回数を知りたい場合はCounter、グループごとの詳細な計算を行いたい場合はgroupbyを使うと覚えておくとよいでしょう。

この使い分けを理解することで、コードの可読性が向上し、無駄な処理を減らすことができます。特に初心者の方は、まずCounterで基本的な集計を行い、その後にgroupbyで応用的な処理に挑戦する流れがおすすめです。

Pythonのデータ集計スキルを身につけるメリット

Pythonで辞書の値を集計できるようになると、データ分析や業務効率化の幅が大きく広がります。例えば、アンケート結果の集計、ログデータの解析、売上データの分析など、さまざまな場面で活用できます。

また、今回紹介したCounterやgroupbyは、Pythonの標準ライブラリとして用意されているため、特別な環境構築をせずにすぐ使える点も大きなメリットです。初心者の方でも安心して学習を進めることができます。

データを正しく集計できるようになることで、プログラムの価値は大きく向上します。ぜひ今回の内容を繰り返し実践しながら、自分のものにしていきましょう。

先生と生徒の振り返り会話

生徒

「Counterを使うとこんなに簡単に集計できるんですね。」

先生

「そうですね。Pythonには便利な機能がたくさん用意されているので、うまく活用することが大切です。」

生徒

「groupbyは少し難しかったですが、できることが多いですね。」

先生

「最初は難しく感じるかもしれませんが、慣れてくるととても便利ですよ。」

生徒

「使い分けを意識するのが大事なんですね。」

先生

「その通りです。目的に応じて使い分けることで、より良いコードが書けるようになります。」

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

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

関連記事:
Python の辞書の記事一覧へ
新着記事
New1
Python
Pythonの変数とは?定義方法とデータ型を初心者向けに解説
New2
PHP
PHP の型変換を完全ガイド!初心者でもわかる明示的変換・自動変換
New3
PHP
PHPのCSVファイルの読み書きと文字列処理を基礎から解説!初心者向けガイド
New4
PHP
PHPのメモリ管理と変数の破棄方法をやさしく解説!初心者でもわかるunsetの使い方
人気記事
No.1
Java&Spring記事人気No1
Python
PythonでAPIリクエストを送信する方法を完全解説!requestsライブラリで簡単API通信
No.2
Java&Spring記事人気No2
Python
Pythonで経過時間を計測する方法を完全解説!初心者でもわかる time.perf_counter() と time.sleep()
No.3
Java&Spring記事人気No3
Python
Pythonのコンストラクタ(__init__)の使い方!初心者でもわかるオブジェクトの初期化
No.4
Java&Spring記事人気No4
PHP
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
No.5
Java&Spring記事人気No5
PHP
PHP のフォームデータの受け取り($_POST, $_GET)を完全解説!初心者向けガイド
No.6
Java&Spring記事人気No6
Python
Pythonのタプルの要素を変更できない理由とその回避策を初心者向けに解説
No.7
Java&Spring記事人気No7
ChatGPT
ChatGPTでPythonコードを作成する方法!プロンプトの書き方と質問例を解説
No.8
Java&Spring記事人気No8
Python
Pythonのrequestsライブラリ完全入門!HTTPリクエストの送り方を初心者向けにやさしく解説