Pandas関数について -集計する時によく使うもの
前回のNumpyの使い方に引き続き、
今回はPandas関数で、集計する際によく使う「groupby関数」「pivot_table関数」について整理。 Irisのデータセットを使って、色々触っていきます。
データ準備
[in]
import sklearn,seaborn as sns
import numpy as np
import pandas as pd
df = sns.load_dataset("iris")
df .head()
[out]
sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa
groupby関数
データをある列のカテゴリーなどに従って、集計することができる。 イメージはSQLのgroup by句に似ている。
今回だと、speciesに注目してsepal_lengthの平均を算出。
[in]
df_temp =df.copy()
df_t = pd.DataFrame()
grep = df_temp.groupby('species') #species毎に集計
df_t['avg'] = grep['sepal_length'].mean()
df_t.head()
[out]
species avg
setosa 5.006
versicolor 5.936
virginica 6.588
pivot_table関数
ピボットテーブルを作ることができる関数です。 使う際に、最低3つの引数を指定してあげる必要があります。
- data: 元データのpandas.DataFrameオブジェクトを指定。
- index: 元データの列名を指定。結果の行見出しとなる。
- columns: 元データの列名を指定。結果の列見出しとなる。
また、これに加えて確認したいカラムの列名指定を"values"という引数に入れてあげると該当のカラムのみを含むピボットテーブルを作成することができる。
[in]
df['test'] = df['petal_length'] > 3.5 # 挙動を確認する目安を設ける
pd.pivot_table(df, index = 'species', columns='test',values='petal_length')
[out]
test False True
species
setosa 1.462 NaN
versicolor 3.320 4.364444
virginica NaN 5.552000
またvaluesに何も指定しないと、引数index, columnsに指定していない全ての列の平均値が算出される。(データ型が数値でない列は除外されます。)
平均値以外の値を算出する場合は、引数aggfuncにnumpyで集計方法を指定してあげれば算出できる。
[in]
pd.pivot_table(df, index = 'species', columns='test',values='petal_length',aggfunc =np.sum)
[out]
test False True
species
setosa 73.1 NaN
versicolor 16.6 196.4
virginica NaN 277.6