ホームページ >バックエンド開発 >Python チュートリアル >Pandas DataFrame をピボットする方法: データを再構成するための包括的なガイド?

Pandas DataFrame をピボットする方法: データを再構成するための包括的なガイド?

DDD
DDDオリジナル
2024-12-25 10:25:09162ブラウズ

How to Pivot a Pandas DataFrame: A Comprehensive Guide to Reshaping Data?

データフレームをピボットするにはどうすればよいですか?

ピボットとは何ですか?

  • データフレームを 長い からワイド format
  • 値が 1 つ以上の列に基づいて集計される新しい DataFrame を作成できます

ピボットするにはどうすればよいですか?

  • 複数ピボットするメソッドDataFrame:

    • pd.DataFrame.pivot_table
    • pd.DataFrame.groupby pd.DataFrame.unstack
    • pd.DataFrame.set_index pd.DataFrame.unstack
    • pd.DataFrame.pivot (未満柔軟)
    • pd.crosstab (クロス集計用)
    • pd.factorize np.bincount (高度な、高パフォーマンス)
    • pd.get_dummies pd.DataFrame.dot (cross集計)

ロングフォーマットからワイドフォーマットへ?

  • ロングフォーマット:

    • 各観測値が占有1 つの行
    • 異なるものを表す複数の列属性/測定
  • ワイド形式:

    • 各観測値は 1 列を占めます
    • 異なる値を表す複数の行属性/測定

質問 1: ValueError が表示されるのはなぜですか: インデックスに重複エントリが含まれており、再形成できません?

  • これは、重複したキーを使用して DataFrame をピボットしようとすると発生します。 pivoted
  • 例: df に row とcol の重複エントリがあり、df.pivot(index='row', columns='col') でピボットすると、エラーが発生します。

質問 2: 列の値が列、行の値がインデックス、val0 の平均がインデックスになるように df をピボットするにはどうすればよいですか?値?

  • Use pd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index='row', columns='col', aggfunc='mean')

質問 3: 欠損値が 0 になるようにするにはどうすればよいですか? ?

  • で fill_value 引数を使用しますpd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='mean')

質問 4: 合計など、平均値以外の値を取得できますか?

  • の異なる aggfunc 引数pd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='sum')

質問 5: 一度に複数の集計を実行できますか?

  • リストを提供してくださいaggfunc 引数への呼び出し可能オブジェクトの数pd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc=[np.size, np.mean])

質問 6: 複数の値列を集計できますか?

  • 複数の列名をの値のリストpd.DataFrame.pivot_table:

    df.pivot_table(values=['val0', 'val1'], index='row', columns='col', fill_value=0, aggfunc='mean')

質問 7: 複数の列で細分化できますか?

  • 複数の列名をリストとして渡しますインデックスまたは列を作成するpd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index=['row', 'item'], columns='col', fill_value=0, aggfunc='mean')

質問 8: または、

  • を使用してインデックスと列の複数の列で細分化できます。 pd.DataFrame.pivot_table:

    df.pivot_table(values='val0', index=['key', 'row'], columns=['item', 'col'], fill_value=0, aggfunc='mean')

質問 9: 列と行が同時に発生する頻度を集計することはできますか (別名「クロス集計」)。

  • pd.crosstab を使用します:

    df.pivot_table(values='val0', index='row', columns='col', aggfunc='mean')

質問 10: 2 つの列のみをピボットして DataFrame をロングからワイドに変換するにはどうすればよいですか?

df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='mean')

質問 11: 複数の列をフラット化するにはどうすればよいですか?ピボット後にインデックスを単一のインデックスに変更しますか?

  • 結合単一の文字列としてのマルチパート インデックス:

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='sum')

以上がPandas DataFrame をピボットする方法: データを再構成するための包括的なガイド?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。