pandas入門 – データの集約

概要

今回は特定のカラムでデータを集約する方法について紹介します。 データを集約することで特定のカラムのデータごとの最大値や平均値などをお求めることができます。 データの集約を行うにはgroupby()を利用します。

  • 特定カラムの平均:groupby(列名1).mean()
  • 特定カラムの総和:groupby(列名1).sum(列名1)
  • 特定カラムの最大値:groupby(列名1).max(列名1)
  • 特定カラムの最小値:groupby(列名1).min(列名1)

1つのカラムで集約

1つのカラムで集約する場合はgroupby()の引数にカラム名を渡します。以下の例では、sexごとの平均値を表示しています。

df = pd.DataFrame({
    'id': [1, 2, 3, 4, 5],
    'name': ['taro', 'takuya', 'erika', 'hanako', 'jiro'],
    'age': [20, 25, 18, 25, 25],
    'sex': ['male', 'male', 'female', 'female', 'male'],
    'height': [170, 180, 160, 165, 190]
})

df.groupby('sex').mean()
		id	age	height
sex			
female	3.500000	21.500000	162.5
male	2.666667	23.333333	180.0

複数のカラムで集約

複数のカラムで集約する場合はgroupby()の引数にリスト型でカラム名をしていします。以下の例ではsexとageで集約した平均を表示しています。

df.groupby(['sex', 'age']).mean()
		id	height
sex	age		
female	18	3	160
25	4	165
male	20	1	170
25	2	180

一括で複数の算出を行う

以下の例では,sexとageで集約したデータのheightの件数、最大値、最小値、合計値、平均値を一括で取得しています。

df.groupby(['sex', 'age']).agg(['count','max', 'min', 'sum', 'mean'])['height']
		count	max	min	sum	mean
sex	age					
female	18	1	160	160	160	160
25	1	165	165	165	165
male	20	1	170	170	170	170
25	2	190	180	370	185

まとめ

groupby()を利用することでデータを集約して、最大値や平均値を求めることができました。色々な指定方法を試して、データの抽出方法に慣れていきましょう。