Pandas.crosstabとPandasピボットテーブルの両方がまったく同じ機能を提供しているようです。違いはありますか?
2つの主な違いは、pivot_table
は入力データがすでにDataFrameであると想定していることです。 DataFrameをpivot_table
に渡し、列名を文字列として渡すことでindex
/columns
/values
を指定します。 cross_tab
では、index
/columns
/values
に配列のようなオブジェクトを渡すだけなので、必ずしもDataFrameを使用する必要はありません。
crosstab
の- ソースコード を見ると、基本的に、渡した配列のようなオブジェクトを受け取り、DataFrameを作成してから、必要に応じてpivot_table
を呼び出します。
一般に、すでにDataFrameがある場合はpivot_table
を使用して、同じDataFrameを再度作成するという追加のオーバーヘッドが発生しないようにします。配列のようなオブジェクトから始めて、ピボットされたデータのみに関心がある場合は、crosstab
を使用します。ほとんどの場合、実際にどの機能を使用するかを決定することはないと思います。
pivot_table
の場合、同じですか?aggfunc=len
とfill_value=0
を使用します。
pd.crosstab(df['Col X'], df['Col Y'])
pd.pivot_table(df, index=['Col X'], columns=['Col Y'], aggfunc=len, fill_value=0)
編集:もっと違いがあります:
デフォルトのaggfunc
は異なります: pivot_table
-np.mean
、 crosstab
-len
。
パラメータmargins_name
はpivot_table
にのみあります。
pivot_table
では、Grouper
およびindex
キーワードにcolumns
を使用できます。
頻度表が必要なだけなら、crosstab
関数の方がいいと思います。
pivot_table
には、残念ながらnormalize
引数がありません。
crosstab
のnormalize
引数は、以下に説明するように、各セルをセルの合計で除算してパーセンテージを計算します。
normalize = 'index'
各セルをその行の合計で割りますnormalize = 'columns'
各セルをその列の合計で割りますnormalize = True
各セルを表のすべてのセルの合計で割ります