パンダ: パーセンテージを含むクロス集計を作成する方法
pandasのcrosstab()関数でnormalize引数を使用すると、数値の代わりにパーセンテージ値を表示するクロス集計を作成できます。
p.d. crosstab (df. col1 , df. col2 , normalize=' index ')
正規化引数は、次の 3 つの異なる引数を受け入れます。
- all : すべての値に対する相対的なパーセンテージを表示します。
- Index : 行の値の合計としてパーセンテージを表示します。
- 列: 列の値の合計としてパーセンテージを表示します。
次の例は、次の pandas DataFrame でこれらの各メソッドを実際に使用する方法を示しています。
import pandas as pd #createDataFrame df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C '], ' position ':['G', 'G', 'F', 'G', 'F', 'F', 'F', 'G', 'G', 'F', 'F'], ' points ': [22, 25, 24, 39, 34, 20, 18, 17, 20, 19, 22]}) #view DataFrame print (df) team position points 0 AG 22 1 AG 25 2 AF 24 3 BG 39 4 BF 34 5 BF 20 6 BF 18 7 GC 17 8 GC 20 9 CF 19 10 CF 22
チームおよびポジションごとのプレーヤー数のデフォルトのクロス集計は次のようになります。
#create crosstab that displays count by team and position
p.d. crosstab (df. team , df. position )
position F G
team
AT 12
B 3 1
C 2 2
例 1: すべての値に対するパーセンテージを含むクロス集計を作成する
引数normalize=allを指定してcrosstab()関数を使用すると、すべての値の合計数に対する各値の割合を表示するクロス集計を作成できます。
#create crosstab that displays counts as percentage relative to total count p.d. crosstab (df. team , df. position , normalize=' all ') position F G team A 0.090909 0.181818 B 0.272727 0.090909 C 0.181818 0.181818
結果を解釈する方法は次のとおりです。
- チーム A のポジション F の選手は、全選手の9.09%を占めます。
- チーム A のポジション G の選手は、全選手の18.18%を占めます。
等々。
例 2: 行合計に対するパーセンテージを含むクロス集計を作成する
引数normalize=indexを指定してcrosstab()関数を使用すると、行の合計に対する各値のパーセンテージを表示するクロス集計を作成できます。
#create crosstab that displays counts as percentage relative to row totals p.d. crosstab (df. team , df. position , normalize=' index ') position F G team A 0.333333 0.666667 B 0.750000 0.250000 C 0.500000 0.500000
結果を解釈する方法は次のとおりです。
- ポジション F の選手はチーム A の全選手の33.33%を占めます。
- ポジション F の選手はチーム B の全選手の75%を占めます。
- ポジション F のプレーヤーは、チーム C の全プレーヤーの50%を占めます。
等々。
例 3: 列の合計に対するパーセンテージを含むクロス集計を作成する
引数normalize=columnsを指定してcrosstab()関数を使用すると、列の合計に対する各値のパーセンテージを表示するクロス集計を作成できます。
#create crosstab that displays counts as percentage relative to column totals p.d. crosstab (df. team , df. position , normalize=' columns ') position F G team A 0.166667 0.4 B 0.500000 0.2 C 0.333333 0.4
結果を解釈する方法は次のとおりです。
- チーム A のプレーヤーは、F ポジションを持つプレーヤー全体の16.67%を占めています。
- チーム B のプレーヤーは、F ポジションを持つプレーヤー全体の50%を占めます。
- チーム C のプレーヤーは、F ポジションを持つプレーヤー全体の33.33%を占めています。
等々。
注: pandascrosstab()関数の完全なドキュメントはここで見つけることができます。
追加リソース
次のチュートリアルでは、パンダで他の一般的なタスクを実行する方法を説明します。
パンダ: GroupBy と値のカウントの使用方法
パンダ: ビン数で GroupBy を使用する方法
Pandas: 条件付きで列の値をカウントする方法