【Python】Pandasのgroupbyでデータを集約する

Pandas
スポンサーリンク

Pandasでデータを集約するには、sum()やmean()を使えば全体の様子を掴むことができます。

ですが、より詳細にデータを集約するには、インデックスや列に条件をつけて絞り込む必要があります。この操作をするにはgroupby()を使うことで実現できます。group by は「グループ別」という意味ですね。

ここでは、このgroupby()の使い方を簡単に見て行こうと思います。

スポンサーリンク

groupby()を使う

jupyter notebookを起動して、まずここで扱うデータを作って起きましょう。

import pandas as pd

data = {'Prefecture': ['Tokyo', 'Tokyo', 'Osaka', 'Osaka', 'Fukuoka', 'Fukuoka'], 
        'Area': ['Aoyama', 'Shibuya', 'Sakai', 'Suita', 'Hakata', 'Kokura'], 
        'Point': [150, 120, 200, 100, 230, 180]}

pandasをインポートして、辞書型のデータを用意します。適当に作ったデータですので、特に意味はありませんのでご注意を。

このデータを使ってDataFrameを作ります。

df = pd.DataFrame(data)

次のように表示されます。

これをgroupby()を使ってデータの集約をして行きます。列名のPrefectureに基づいて、行をグループ化します。

df.groupby('Prefecture')

グループ化したオブジェクトができました。

これをby_prefという変数に代入してメソッドを呼び出していきましょう。

mean(), sum(), std()

まずデータの平均を出してみます。

by_pref = df.groupby('Prefecture')
by_pref.mean()

平均はmean()で求められます。

それぞれ2つのデータが入っていましたが、そのそれぞれの平均が求められています。

次は合計、標準偏差です。

by_pref.sum()
by_pref.std()

合計はsum()、標準偏差はstd()で求めます。

locでラベルを指定

次は、locを使って行ラベルを指定し、合計を出してみます。

by_pref.sum().loc['Tokyo']
df.groupby('Prefecture').sum().loc['Tokyo']

Tokyoの合計を出します。dfのまま集約もしてみました。

count()

それぞれのデータ数を数えるにはcount()を使います。

df.groupby('Prefecture').count()

Prefectureを基準にしてそれぞれのデータ数がカウントされてます。

max(), min()

それぞれの最大値、最小値を求めます。

df.groupby('Prefecture').max()
df.groupby('Prefecture').min()

最大値、最小値はmax()、min()を使います。

各データの最大値、最小値が得られています。

describe()で要約統計量を取得

要約統計量を求めるにはdescribe()を使います。

df.groupby('Prefecture').describe()

統計量の意味を復習しておくと、それぞれデータ個数、平均、標準偏差、最小値、第一四分位数、第二四分位数、第三四分位数、最大値を意味します。

データの行と列とを入れ替えるにはtranspose()を使います。

df.groupby('Prefecture').describe().transpose()

行ラベルを指定して統計量を取得することもできます。

df.groupby('Prefecture').describe().transpose()['Tokyo']

Tokyoのデータの統計量が取得できました。

スポンサーリンク

最後に

ここではPythonの拡張モジュールのPandasを使って、groupby()の操作を見てきました。

そのままsum()やmean()を使えばデータの全体の様子を掴むことができますが、groupby()を通すことでインデックスや列に条件をつけてデータを詳細に絞り込むことができます。

タイトルとURLをコピーしました