用語比較
DataFrame.pivotとpivot_tableの違い|集計しない組み替えか、集計つきの表か(Python3データ分析)
pivot は、列の値をもとに、表の形を組み替えます。集計はしません。pivot_table は、同じ組み合わせの値を集計して、表にします。
pivot は、同じ index と columns の組み合わせに複数の値があると ValueError になります。
この記事の目次
この記事の根拠と出典
各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。
DataFrame.pivotとpandas.pivot_tableの要点
DataFrame.pivot
index・columns・values で表の形を組み替える。集計はしない。同じ index と columns の組に複数の値があると ValueError になる。
pandas.pivot_table
同じ組み合わせの値を aggfunc で集計して表にする。aggfunc の既定値は 'mean'。fill_value で欠損値を置き換えられる。
違いを表で確認
| 比較軸 | DataFrame.pivot | pandas.pivot_table |
|---|---|---|
| 集計 | しない | する(aggfunc の既定値は 'mean') |
| 同じ index と columns の組が重複したとき | ValueError になる | aggfunc で1つの値にまとめる |
| 欠損値の置き換え | 引数なし | fill_value で指定できる |
| 使いどころ | すでに1組1値の表を、縦長から横長へ組み替える | 重複のあるデータを、合計や平均で表にする |
Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
縦長のデータを、そのまま横長の表にしたい人
pivot を使います。index と columns の組ごとに値が1つなら、値を変えずに形だけ組み替えます。
同じ組み合わせの行が複数あり、合計や平均を出したい人
pivot_table を使います。aggfunc に 'sum' や 'mean' を渡して集計します。
pivot で「Index contains duplicate entries」と出て、止まった人
同じ index と columns の組に、複数の値があります。集計してよいなら、pivot_table に替えます。
具体例で使い分ける
例 1
pivot は値を変えずに形を組み替える
公式の例の df(foo が one と two、bar が A・B・C、baz が 1〜6)に、df.pivot(index="foo", columns="bar", values="baz") を使います。
- foo ごとに行が、bar ごとに列ができます。
- 結果は、one の行が 1・2・3、two の行が 4・5・6 になります。
- 各組み合わせに値が1つしかないので、集計は要りません。
結論: pivot は、1組1値のデータの形を組み替えるときに使います。
例 2
重複があると pivot は ValueError になる
公式の例の foo が one・one・two・two、bar が A・A・B・C、baz が 1〜4 の df に、同じ pivot を使います。
- 先頭の2行は、index(foo)と columns(bar)が one と A で同じです。
- 公式の例では、
ValueError: Index contains duplicate entries, cannot reshape と出ます。 - 公式は、集計が要るときは DataFrame.pivot_table を使うよう書いています。
結論: 重複があるデータには、pivot ではなく pivot_table を使います。
例 3
pivot_table は aggfunc で集計する
公式の例の df に、pd.pivot_table(df, values="D", index=["A", "B"], columns=["C"], aggfunc="sum") を使います。
- A と B の組ごとに、C が large か small かで D を合計します。
- 結果は、bar・one の行が large 4.0・small 5.0、foo・two の行が large
NaN・small 6.0 です。 - fill_value=0 を足すと、
NaNだったマスが 0 になります。
結論: pivot_table は、集計と欠損値の置き換えまでを1回で行えます。
問題文から答えを選ぶ手順
- 1
index と columns の組に重複があるかを確かめる
重複がなければ pivot、あるなら pivot_table です。
- 2
集計の方法を決める
合計なら 'sum'、平均なら 'mean' を aggfunc に渡します。既定値は 'mean' です。
- 3
欠損値の扱いを決める
NaNを 0 などにしたいなら、pivot_table の fill_value を使います。
試験での見分け方
- 1集計せずに形だけ組み替えるときは、pivot を使う。
- 2同じ index と columns の組に複数の値があり、集計してよいときは、pivot_table を使う。
- 3pivot_table の aggfunc の既定値は 'mean' である。
- 4pivot で重複があると、
ValueErrorになる。
誤答しやすい選択肢
pivot でも重複を自動で平均してくれると考える
修正: pivot は集計しません。重複があると ValueError です。平均を出したいなら pivot_table を使います。
pivot_table の既定の集計が合計だと考える
修正: aggfunc の既定値は 'mean'(平均)です。合計が欲しいときは aggfunc="sum" と指定します。
pivot_table の結果の NaN を、データの欠けと思い込む
修正: その組み合わせの行が元のデータにないために NaN になっています。fill_value で 0 などに置き換えられます。
確認問題
Q1同じ index と columns の組に複数の値があるデータへ pivot を使うと?
答え: ValueError になる
公式の例では「Index contains duplicate entries, cannot reshape」と出ます。
Q2pivot_table の aggfunc の既定値は?
答え: 'mean'
公式のシグネチャに aggfunc='mean' と書かれています。
Q3pivot_table で欠損値を 0 に置き換える引数は?
答え: fill_value
公式は、fill_value を、集計後の結果の欠損値を置き換える値としています。
Q4集計をしないのは、pivot と pivot_table のどちらか?
答え: pivot
公式は、pivot は data aggregation をサポートしないと書いています。
到達チェック
- pivot が集計しないことを説明できる
- 重複があるときに pivot が
ValueErrorになることを言える - pivot_table の aggfunc の既定値を答えられる
- fill_value の役割を言える
関連ページで確認する
同じ資格で次に知りたいこと
- np.sortとnp.argsortの違い|並べ替えた値か、並べ替える順番の添字か(Python3データ分析)
NumPyのnp.sort(並べ替えた配列のコピー)とnp.argsort(並べ替える順番を表す添字の配列)の違いを、返り値、元の配列との関係、使いどころで整理します。NumPy公式リファレンスの例のx = np.array([3, 1, 2])でnp.argsort(x)がarray([1, 2, 0])になる点つきです。
- Series.mapとapplyの違い|dictで置き換えるか、関数や引数つきで処理するか(Python3データ分析)
pandasのSeries.map(dictやSeriesによる置き換え、na_action)とSeries.apply(関数やNumPyのufunc、args)の違いを、dictにない値の扱い、欠損値の扱い、戻り値で整理します。pandas公式リファレンスの例で、dictにないキーが
NaNになる点つきです。 - np.zerosとnp.emptyの違い|0で埋めるか、初期化しないか(Python3データ分析)
NumPyのnp.zeros(0で埋めた配列)とnp.empty(初期化しない配列)の違いを、中身の値、速度、使いどころで整理します。NumPy公式リファレンスの例のnp.zeros(s)(s=(2, 2))が2行2列の0になる一方、np.empty([2, 2])の中身は不定になる点つきです。
よくある質問
Qpivotとpivot_tableの違いは?
pivot は集計せずに表の形を組み替え、pivot_table は同じ組み合わせの値を aggfunc で集計して表にします。
QpivotでValueErrorが出るのはなぜですか?
同じ index と columns の組に複数の値があるためです。集計してよいなら pivot_table を使います。
Qpivot_tableの既定の集計は?
aggfunc の既定値は 'mean'(平均)です。
Qデータ分析試験の範囲?
本サイトの第4章 pandas で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
