データ集計を簡単に!Pandasのgroupby()メソッドの活用法

groupby()メソッドは、Pandasでデータをグループ化するために使用されるメソッドです。

データをグループ化することで、グループ単位で統計量や集計処理を行うことができます。

groupby()メソッドは、SQLのGROUP BY句に似た動作をします。

できること

  • 特定の列の値に基づいてデータをグループ化することができます。
  • グループ内の行を集計することができます(平均、合計、最大、最小など)。
  • グループ化されたデータを新しいデータフレームとして取得することができます。
  • 複数の列でグループ化することができます。

spyderの使い方が分からない方や、エラーが出る方は下のボタンをクリックしてください。

spyderの使い方(ファイル作成・プログラム実行など)が分からない方はクリック

spiderのインストールがまだの方

「Anaconda Powershell Prompt」や「spyder」が分からない方は「Anacondaをインストール|pythonが動く環境を構築しよう」をご覧ください。

新しいファイルを作成する

画面上部のツールバーの中の「用紙」のようなアイコンをクリックすると作成できます。

ショートカットキー Ctrl+N でも作成することが可能です。

プログラムを全部実行する

画面上部のツールバーの中の「再生ボタン」のようなアイコンをクリックするとプログラムが動きます。書いてあるプログラムを全て実行します。

ショートカットキー F5 でも実行することが可能です。

プログラムを一部実行する

画面上部のツールバーの中の「カーソル」のようなアイコンをクリックすると、カーソルを置いている行のプログラムだけが実行されます。何行かを範囲選択している場合は、選択している行のプログラムだけが実行されます。

ショートカットキー F9 でも実行することが可能です。

ModuleNotFoundError が出る方はクリック

「ライブラリがインストールされてないですよ」というエラー文です。ライブラリをインストールして解消しましょう。インストールはとても簡単です。「Anaconda Powershell Prompt」を新たに立ち上げ、適切なコマンドを貼り付けてエンターを押すだけです。

ModuleNotFoundErrorに続く文字によって、コマンドが異なりますので、エラー文をよく見て適切なコマンドを貼り付けてください。

ModuleNotFoundError: No module named 'webdriver_manager'

pip install webdriver-manager

「Anaconda Powershell Prompt」を新しく立ち上げます。そこに上記コードをコピーしてエンターを押します。必要なライブラリが自動でインストールされるので、終わるまで待ちます。

ModuleNotFoundError: No module named 'selenium'

pip install selenium

「Anaconda Powershell Prompt」を新しく立ち上げます。そこに上記コードをコピーしてエンターを押します。必要なライブラリが自動でインストールされるので、終わるまで待ちます。

読み終わりまで
短い
10分
以内
20分位
30分位
40分位
60分
以上
長い

groupby()メソッドの使い方

read_csv関数を使ってCSVファイルを読み込むには、以下のようにコードを記述します。

import pandas as pd

df = pd.read_csv('sample.csv')
grouped = df.groupby('column')

ここで、dfはデータフレームオブジェクト、'column'はグループ化する列名を指定します。groupby()メソッドは、指定した列名でデータをグループ化した結果を返します。

groupedオブジェクトには、以下のようなメソッドを使用することができます。

メソッド名できること
sum()各グループの合計値を計算します。
mean()各グループの平均値を計算します。
std()各グループの標準偏差を計算します。
count()各グループの行数を計算します。
size()各グループの行数を計算します(count()とは異なり、欠損値もカウントします)。
max()各グループの最大値を計算します。
min()各グループの最小値を計算します。
describe()各グループの基本統計量(count、mean、std、min、25%、50%、75%、max)を計算します。
aggregate(func)funcで指定した関数を各グループに適用します。
apply(func)funcで指定した関数を各グループに適用します。
transform(func)funcで指定した関数を各グループに適用し、元のデータフレームのサイズとインデックスを保持します。
filter(func)funcで指定した条件を満たすグループだけを抽出します。


以下では、これらのメソッドの使い方について詳しく説明します。

「import pandas as pd」とは

「pd」は、Pandasの別名を定義するためのコードです。Pandasをインポートする際に「as pd」という文を付けることで、「pd」という短い別名を定義することができます。以降、Pandasの機能を呼び出す際には、「pd.メソッド名」という形式で呼び出すことができます。

sum(), mean(), std(), count(), size(), max(), min(), describe()

これらのメソッドは、グループ単位での集計処理を行います。たとえば、以下のように使用することができます。

import pandas as pd

df = pd.read_csv('sample.csv')
grouped = df.groupby('column')

grouped.sum()
grouped.mean()
grouped.std()
grouped.count()
grouped.size()
grouped.max()
grouped.min()
grouped.describe()


aggregate(func):

このメソッドは、グループ化されたデータフレームに対して、指定された関数を適用して集計するために使用されます。

関数は、各グループ内の列に適用され、各グループに対して単一の集計値が返されます。

たとえば、平均、合計、中央値、最小値、最大値などの関数が使用されます。

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eric'],
        'Gender': ['F', 'M', 'M', 'M', 'M'],
        'Age': [25, 35, 20, 30, 40],
        'Salary': [50000, 60000, 55000, 45000, 70000]}

df = pd.DataFrame(data)

grouped = df.groupby('Gender')

result = grouped.aggregate({'Age': 'mean', 'Salary': 'sum'})

print(result)
              Age  Salary
Gender                  
F       25.000000   50000
M       31.666667  220000

この例では、データフレームを'Gender'列でグループ化しています。

その後、平均年齢と合計給与を計算するために、'Age'列にはmean(平均)関数、'Salary'列にはsum(合計)関数が適用されています。

結果は、各性別の平均年齢と合計給与が含まれた新しいデータフレームとして返されます。

apply(func):

このメソッドは、指定された関数を各グループに適用し、各グループに対して独自の計算を実行するために使用されます。

このメソッドは、データフレーム内の各列を個別に処理するためのより柔軟なアプローチを提供します。

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eric'],
        'Gender': ['F', 'M', 'M', 'M', 'M'],
        'Age': [25, 35, 20, 30, 40],
        'Salary': [50000, 60000, 55000, 45000, 70000]}

df = pd.DataFrame(data)

grouped = df.groupby('Gender')

result = grouped.apply(lambda x: x['Salary'].sum() / x['Age'].mean())

print(result)
Gender
F    2000.0
M    7360.0
dtype: float64

この例では、まず、データフレームを'Gender'列でグループ化し、各グループの'Salary'列の合計値を'Age'列の平均値で割ります。

これを行うには、lambda関数を使用します。lambda関数は、1つ以上の引数を受け取り、処理を実行して結果を返す無名関数です。

上記の例では、lambda関数は、各グループに対して'Salary'列の合計値を'Age'列の平均値で割ります。

transform(func)

このメソッドは、指定された関数を各グループに適用し、元のデータフレームのサイズとインデックスを保持するために使用されます。

このメソッドは、各グループ内で個別の計算を行い、元のデータフレームと同じ形式で結果を返します。

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eric'],
        'Gender': ['F', 'M', 'M', 'M', 'M'],
        'Age': [25, 35, 20, 30, 40],
        'Salary': [50000, 60000, 55000, 45000, 70000]}

df = pd.DataFrame(data)

grouped = df.groupby('Gender')

result = grouped.transform(lambda x: (x - x.mean()) / x.std())

print(result)
        Age    Salary
0       NaN       NaN
1  0.439155  0.240192
2 -1.317465 -0.240192
3 -0.146385 -1.200961
4  1.024695  1.200961

この例では、各グループ内の'Salary'列と'Age'列を標準化します。

標準化とは、各値から平均値を引いて標準偏差で割ることで、データを平均0、標準偏差1の形式に変換することです。

この例では、lambda関数を使用して、各グループ内の'Salary'列と'Age'列を標準化します。

標準化されたデータは、元のデータフレームと同じ形式で返されます。

lambda関数とは

lambda関数は、Pythonの無名関数(匿名関数)であり、1行の簡単な関数を定義するために使用されます。lambda関数は、defキーワードを使用して関数を定義する必要がなく、通常の関数と同じように使用することができます。

filter(func)

このメソッドは、指定された条件を満たすグループだけを抽出するために使用されます。

このメソッドは、Trueを返すグループだけが結果に含まれます。

import pandas as pd

data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eric'],
        'Gender': ['F', 'M', 'M', 'M', 'M'],
        'Age': [25, 35, 20, 30, 40],
        'Salary': [50000, 60000, 55000, 45000, 70000]}

df = pd.DataFrame(data)

grouped = df.groupby('Gender')

result = grouped.filter(lambda x: x['Salary'].mean() > 55000)

print(result)
      Name Gender  Age  Salary
1      Bob      M   35   60000
2  Charlie      M   20   55000
3    David      M   30   45000
4     Eric      M   40   70000

この例では、'Gender'列でグループ化されたデータフレームから、平均給与が55000より大きいグループだけを抽出します。

lambda関数は、各グループの平均給与を計算し、55000より大きいグループだけを返します。

結果には、'F'グループが含まれていないことに注意してください。これは、'F'グループの平均給与が55000より大きくなかったためです。

まとめ

groupby() メソッドは、Pandasライブラリで最も一般的に使用されるデータ処理の機能の1つです。

このメソッドを使用することで、データフレームの行を特定の列の値に基づいてグループ化し、グループごとに平均値、合計、最小値、最大値などを計算することができます。

今回ご紹介したメソッドを使用すれば、簡単に、集計処理をカスタマイズすることができます。

ひとり親家庭・働く女性支援!MamaEduプロジェクト!

ひとり親家庭の方々に向けた、Webスキルを身に着けることができる「インターネット・アカデミー」をご紹介します。インターネット・アカデミーは、1995年に開校した日本初のWeb専門スクールで、Webデザイン、Webマーケティング、プログラミング、動画編集など、現場で活躍できるIT人材の育成を行っています。3万人以上の卒業生が活躍しており、2022年にはTBSテレビ「news23」のSDGs特集でも紹介されるなど、注目を集めています。

特に、ひとり親向けの給付金制度を活用した場合、最大で193万円受給しながら勉強ができるという大変お得なシステムがあります。Webデザイン、Webマーケティング、プログラミングなど、15コース以上の給付金対象のコースがあり、国の給付金を活用して学べる点が魅力です。また、キャリアプロデューサーによる就職支援や、女性向けの「mamaeduプロジェクト」など、ひとり親家庭の方々をサポートする取り組みも充実しています。

Webスキルを身に着けることによって、将来的には自分自身のキャリアアップにもつながりますし、求人市場でも高い需要があります。是非、インターネット・アカデミーを通じて、新しいスキルを身に着け、将来の夢を実現してみてはいかがでしょうか。

<strong>しゃちく</strong><span data-color="#7bdcb5" style="background: linear-gradient(transparent 60%,rgba(123, 220, 181, 0.7) 0);" class="vk_highlighter"><br></span>
しゃちく

福岡の中小企業で、社内SEとして勤務。
主な業務は、通販の運営、自社飲食店のハンディやレジの設定、PCトラブル対応、LP作成、HP更新など。
Pythonで業務自動化ツールを100個以上自作した経験をもとに、ツールを作る方法をメインにブログを更新している。
このブログが、誰かのお役に立てば幸いです!

投稿





コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です