Pandas学習ノート8——データ透視表


データピボット
データ・ピボット・テーブルはGroupbyと同様の操作方法であり、Excelや同様のテーブル・アプリケーションでよく使用されます.データ・ピボット・テーブルは、各カラムを入力として使用し、データを複数の次元の累積情報に細分化する2 Dデータ・テーブルを出力します.データ・ピボット・テーブルは、Groupby操作よりも多次元GroupBy積算操作のように見えます.つまり、分割-適用-組合せもできますが、分割と組合せは1次元インデックスではなく、2次元ネットワーク上で発生します(行と列が同時にグループ化されます).
#              
import numpy as np
import pandas as pd
import seaborn as sns
titanic = sns.load_dataset('titanic')

データピボット構文
#                       ,        mean()
titanic.pivot_table('survived', index='sex', columns='class')

#    
class      First    Second     Third
sex                                 
female  0.968085  0.921053  0.500000
male    0.368852  0.157407  0.135447
#pivot_table      ,                       
#  pd.cut         

age = pd.cut(titanic['age'], [1,18,80])
titanic.dropna('age').pivot_table('survived', ['sex', age], 'class')

#    
class               First    Second     Third
sex    age                                   
female (18, 80]  0.909091  1.000000  0.511628
       NaN       0.972973  0.900000  0.423729
male   (18, 80]  0.800000  0.600000  0.215686
       NaN       0.375000  0.071429  0.133663

その他のデータピボット・オプション
#DataFrame pivot_table         :
DataFrame.pivot_table(data, value=None, index=None, columns=None, aggfunc='mean',
                      fill_value=None, margins=False,dropna=True, margins_name='All')
  • aggfuncパラメータは、累積関数タイプを設定するために使用され、デフォルトはmean()です.groupbyの用法と同様に、積算関数はいくつかの一般的な文字列(「sum」,「mean」,「count」,「min」,「max」など)で表すことができ、標準的な積算関数(np.sum(),npであってもよい.min()、sum()など)で表します.また、辞書で異なるカラムに異なる積算関数を指定することもできます.
    titanic.pivot_table(index='sex', columns='class', aggfunc={'survived':sum, 'fare':mean})
    
    
    #    :
    
                fare                       survived             
    class        First     Second      Third    First Second Third
    sex                                                           
    female  106.125798  21.970121  16.118810       91     70    72
    male     67.226127  19.741782  12.661633       45     17    47
  • 各グループの合計数を計算する必要がある場合は、marginsパラメータで設定できます.marginのラベルはmargins_nameパラメータを設定します.デフォルトは「All」
    titanic.pivot_table('survived', index='sex', columns='class', margins=True)
    
    
    #    :
    
    class      First    Second     Third       All
    sex                                           
    female  0.968085  0.921053  0.500000  0.742038
    male    0.368852  0.157407  0.135447  0.188908
    All     0.629630  0.472826  0.242363  0.383838
  • です.