PandasのGroupByで各組み合わせの出現回数をカウントする方法
Pandasで複数の列を基準にデータをグループ化し、各組み合わせの出現回数をカウントしたい場合は、DataFrame.groupby()メソッドとsize()メソッドを組み合わせるのが最もシンプルな方法です。groupby()メソッドは、指定した列の値に基づいてDataFrameを複数のグループに分割し、size()がそれぞれのグループに含まれる行数(出現回数)を返します。
手順1:Pandasライブラリをインポートする
まず、慣例に従ってエイリアス「pd」を付けてpandasライブラリをインポートします。
import pandas as pd
手順2:サンプルデータを用意する
次に、車種・販売地域・販売台数を含む辞書形式のデータを初期化します。
# データの初期化
mylist = {'Car': ['BMW', 'Mercedes', 'Lamborgini', 'Audi', 'Mercedes', 'Porche', 'RollsRoyce', 'BMW'],
'Place': ['Delhi', 'Hyderabad', 'Chandigarh', 'Bangalore', 'Hyderabad', 'Mumbai', 'Mumbai', 'Delhi'],
'Sold': [95, 80, 80, 75, 90, 90, 95, 50]}
手順3:DataFrameを作成する
用意したデータから、列名を指定してDataFrameを生成します。
# DataFrameの作成 dataFrame = pd.DataFrame(mylist, columns=['Car', 'Place', 'Sold'])
手順4:groupby()とsize()で出現回数をカウントする
groupby()に「Car」と「Place」の2列を渡し、size()を呼び出すことで、車種と地域の各組み合わせが何回出現するかを集計できます。
print("Counting the occurrences...")
res = dataFrame.groupby(['Car', 'Place']).size()
完全なコード例
ここまでの手順をまとめたコード全体は以下の通りです。
# ライブラリのインポート
import pandas as pd
# データの初期化
mylist = {'Car': ['BMW', 'Mercedes', 'Lamborgini', 'Audi', 'Mercedes', 'Porsche', 'RollsRoyce', 'BMW'],
'Place': ['Delhi', 'Hyderabad', 'Chandigarh', 'Bangalore', 'Hyderabad', 'Mumbai', 'Mumbai', 'Delhi'],
'Sold': [95, 80, 80, 75, 90, 90, 95, 50]}
# DataFrameの作成
dataFrame = pd.DataFrame(mylist, columns=['Car', 'Place', 'Sold'])
print(dataFrame)
print("Counting the occurrences...")
res = dataFrame.groupby(['Car', 'Place']).size()
# 出現回数の表示
print(res)
実行結果
上記のコードを実行すると、以下のような出力が得られます。
Car Place Sold 0 BMW Delhi 95 1 Mercedes Hyderabad 80 2 Lamborgini Chandigarh 80 3 Audi Bangalore 75 4 Mercedes Hyderabad 90 5 Porsche Mumbai 90 6 RollsRoyce Mumbai 95 7 BMW Delhi 50 Counting the occurrences... Car Place Audi Bangalore 1 BMW Delhi 2 Lamborgini Chandigarh 1 Mercedes Hyderabad 2 Porsche Mumbai 1 RollsRoyce Mumbai 1 dtype: int64
結果の読み方
出力を見ると、たとえば「BMW × Delhi」の組み合わせは2回、「Mercedes × Hyderabad」も2回出現していることがわかります。それ以外の組み合わせはすべて1回のみです。このように、groupby()とsize()を組み合わせれば、複数列の組み合わせごとの出現回数を簡単に集計できます。なお、結果をDataFrameとして扱いたい場合は、.reset_index(name='Count')を追加すると便利です。
-
PandasのマルチインデックスDataFrameでgroupbyを実行する方法
マルチインデックスDataFrameとは、複数のインデックス(階層的なインデックス)を持つデータフレームのことです。本記事では、マルチインデックス化されたDataFrameに対してgroupbyを使用し、特定のレベルごとに集計を行う方法を解説します。サンプルデータの準備まず、デスクトップに保存された以下のようなCSVファイル(sales.csv)を用意します。車種(Car)、地域(Place)、販売台数(UnitsSold)のデータが含まれています。最初に、pandasライブラリをインポートし、CSVファイルを読み込みます。import pandas as pd df = pd.read_c
-
Python Pandas DataFrameで各グループごとに最大値を持つ行を抽出する方法
はじめに データ分析において最も基本的かつ頻繁に行われる操作のひとつが、「グループ内で特定の列が最大値となる行を選択する」ことです。本記事では、PandasのDataFrameを使って、各グループの中から最大値を持つ行を抽出する方法を、具体的なコード例とともにわかりやすく解説します。 課題の確認 まず、取り組むタスクを明確にしましょう。ここでは「映画データセット」を例に、各公開年ごとに最も人気(popularity)の高い映画をリストアップすることを目標とします。 実装手順 1. データの準備 データ分析用のデータセットは、Kaggleなどのサイトで自由に入手できます。ここではGitHub上