あるデータの集合から、何らかのデータ変形を行って配列から一つの値を生成することをデータの集約という。
分かりやすい例でいうと、あるデータの合計値のようなものも、データの集約の一つだ。
pandasのgroupby関数で生成したGroupByオブジェクトに対して、様々な集約メソッドを実行することができるが、今回は基礎的なメソッドの紹介に加えて、自分で定義した集約関数を実行したりといった応用的な使い方を紹介する。
Contents
サンプルデータフレームの用意
まずは今回使用するサンプルのデータフレームを用意しよう。
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 2), columns=['data1', 'data2']) df['key1'] = ['a', 'a', 'b', 'b', 'a'] df['key2'] = ['one', 'two', 'one', 'two', 'one'] # data1 data2 key1 key2 # 0 0.255836 -1.054339 a one # 1 -0.517051 -0.624876 a two # 2 0.784411 0.604397 b one # 3 -2.090489 1.272901 b two # 4 -1.629585 1.858916 a one
グループ化したオブジェクトの集約メソッド
用意したデータフレームに基本的な集約メソッドを実行してみる。
countメソッド
countメソッドは欠損値以外の値の数をカウントする。
grouped = df.groupby('key1') grouped.count() # data1 data2 key2 # key1 # a 3 3 3 # b 2 2 2
sumメソッド
sumメソッドは欠損値以外の合計を返す。
grouped = df.groupby('key1') grouped.sum() # data1 data2 # key1 # a -1.890800 0.179701 # b -1.306078 1.877298
meanメソッド
meanメソッドは欠損値以外の平均値を返す。
grouped = df.groupby('key1') grouped.mean() # data1 data2 # key1 # a -1.890800 0.179701 # b -1.306078 1.877298
medianメソッド
medianメソッドは欠損値以外の算術中央値を返す。
grouped = df.groupby('key1') grouped.median() # data1 data2 # key1 # a -0.517051 -0.624876 # b -0.653039 0.938649
max / minメソッド
maxメソッドは欠損値以外の最大値を、minメソッドは欠損値以外の最小値を返す。
grouped = df.groupby('key1') grouped.max() # data1 data2 key2 # key1 # a 0.255836 1.858916 two # b 0.784411 1.272901 two grouped.min() # key1 # a -1.629585 -1.054339 one # b -2.090489 0.604397 one
このほか、標準偏差を返すstdメソッドや、分散を返すvarメソッドなども用意されているが、ここでは割愛する。
自分で定義した集約関数を実行する
次は自分自身で定義した集約関数を、GroupByオブジェクトに対し実行する例を紹介する。
まずは下記の簡単な関数を定義する。
def sample_method(arr): return arr.max() - arr.min()
自分で定義した集約関数を使う場合は、GroupByオブジェクトのaggメソッドの引数に関数を渡す。
grouped = df.groupby('key1') grouped.agg(sample_method) # data1 data2 # key1 # a 1.885421 2.913255 # b 2.874900 0.668504