pandasで複数列を使ったgroupby操作!

はじめに

pandasはPythonのデータ分析ライブラリであり、データの集計・加工・分析を行うのに非常に便利な機能が備わっています。その中でも、groupby操作はよく使われる機能の一つです。groupby操作を使うことで、データを複数のキーでグループ化し、集計や統計処理を行うことができます。

今回は、pandasのgroupby操作について、複数列を使った操作にフォーカスして解説していきます。

pandas groupbyの基本概念と複数列を使った操作のメリット

groupby操作は、データフレームをグループ化して集計するための機能です。groupbyを使うことで、以下のような処理を簡単に行うことができます。

  • データの集計
  • データの集約
  • データのフィルタリング

groupby操作を複数列で行うことで、より細かいグルーピングができるようになります。たとえば、性別と年齢を複数のキーとして指定することで、より細かい集計が可能になります。

複数列でのgroupby操作の基本構文

pandasのgroupby操作は、以下のような構文になっています。

df.groupby([キー1, キー2, ...]).集計関数()

ここで、キー1、キー2、…はグルーピングのキーとなる列名であり、集計関数には、count、sum、mean、median、max、min、std、var、first、last、nth、size、agg、apply、transformなどがあります。

たとえば、以下のようなデータフレームがあったとします。

import pandas as pd
data = {
    'gender': ['male', 'male', 'female', 'female', 'male'],
    'age': [25, 35, 20, 30, 25],
    'height': [170, 180, 165, 155, 175],
    'weight': [65, 80, 50, 55, 70]
}
df = pd.DataFrame(data)
print(df)

この場合、genderとageをグルーピングして、heightとweightの平均値を求めるには、以下のようなコードになります。

df.groupby(['gender', 'age'])[['height', 'weight']].mean()

このコードでは、genderとageをグルーピングのキーとして指定し、heightとweightの平均値を求めています。ここで、[[‘height’, ‘weight’]]という形式で、平均値を求めたい列を指定しています。

複数列でのgroupby操作を使った集計方法

複数列でのgroupby操作を使った集計方法には、以下のようなものがあります。

1. 合計値の計算

複数列での合計値の計算には、sum()メソッドを使います。

df.groupby(['gender', 'age'])[['height', 'weight']].sum()

2. 平均値の計算

複数列での平均値の計算には、mean()メソッドを使います。

df.groupby(['gender', 'age'])[['height', 'weight']].mean()

3. 最大値の計算

複数列での最大値の計算には、max()メソッドを使います。

df.groupby(['gender', 'age'])[['height', 'weight']].max()

4. 最小値の計算

複数列での最小値の計算には、min()メソッドを使います。

df.groupby(['gender', 'age'])[['height', 'weight']].min()

実践例: 複数列を使ったgroupby操作でのデータ解析

ここでは、複数列を使ったgroupby操作を使ったデータ解析の実践例を紹介します。

例えば、以下のようなデータがあったとします。

import pandas as pd
data = {
    'country': ['USA', 'USA', 'USA', 'Japan', 'Japan', 'Japan'],
    'year': [2019, 2020, 2021, 2019, 2020, 2021],
    'sales': [100, 200, 150, 50, 80, 70]
}

df = pd.DataFrame(data)
print(df)

この場合、countryとyearをグルーピングのキーとして、salesの合計値を求めるには、以下のようなコードになります。

df.groupby(['country', 'year'])['sales'].sum()

また、country別のyearごとの平均売上高を求めるには、以下のようなコードになります。

df.groupby(['country', 'year'])['sales'].mean()

groupby操作を使うことで、複数のキーでグループ化したデータを簡単に集計することができます。

まとめ

今回は、pandasのgroupby操作について、複数列を使った操作について解説しました。

複数列でのgroupby操作を使うことで、より細かいグルーピングができるようになります。また、groupby操作を使うことで、データを集計やフィルタリングすることができます。

以上が、pandasで複数列を使ったgroupby操作の基本的な使い方となります。