ホームページ >バックエンド開発 >Python チュートリアル >Pandas で DataFrame を効率的にピボットするにはどうすればよいですか?

Pandas で DataFrame を効率的にピボットするにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-25 13:29:42779ブラウズ

How Can I Efficiently Pivot DataFrames in Pandas?

DataFrame のピボット

概要

転置とも呼ばれるピボットは、行と列が交換されるデータ変換の一般的な操作です。データをより適切な形式に再構成したり、複数のディメンションにわたってデータを要約するレポートを作成したりするタスクに役立ちます。 Python では、pandas は DataFrame をピボットするためのメソッドをいくつか提供していますが、それぞれに独自の長所と制限があります。

基本的なピボット

基本的なピボットには、次のメソッドを使用できます。

pandas.pivot_table: このメソッドは、データをピボットするための柔軟なインターフェイスを提供します。行、列、値として使用する列を指定します。平均、合計、カウントなどのさまざまな集計関数をサポートします。

pandas.DataFrame.groupby pandas.unstack: groupby を使用して目的の列ごとにデータをグループ化し、結果の MultiIndex を次を使用してアンスタックします。スタックを解除してピボットされた DataFrame を作成します。

詳細ピボット

より複雑なピボット操作には、次のメソッドを使用できます。

pandas.DataFrame.set_index pandas.unstack: groupby と似ていますが、次のメソッドを使用するとより効率的です。一意の行セットを中心にピボットし、 columns.

pandas.DataFrame.pivot: pivot_table のより簡潔なバージョンですが、機能が制限されています。

その他のメソッド

pandas。クロス集計: 分割表の作成に役立ちます(クロス集計)、2 つのカテゴリ変数にわたるデータを集計するピボットのタイプ。

pandas.factorize numpy.bincount: 特定の操作を高速化できる、より高度な手法。因数分解を使用してカテゴリ値を一意の整数に変換し、bincount を使用して出現回数をカウントします。

pandas.get_dummies pandas.DataFrame.dot: ダミー変数を使用してクロス集計を実行する独創的な方法.

ここにいくつかありますこれらのメソッドの使用例:

# Import pandas
import pandas as pd

# Create a sample DataFrame
df = pd.DataFrame({
    "key": ["a", "b", "c", "a", "b"],
    "row": [1, 2, 3, 4, 5],
    "col": ["col1", "col2", "col3", "col1", "col2"],
    "val": [10, 20, 30, 40, 50]
})

# Pivot using pivot_table
pivoted_df = pd.pivot_table(
    df, index="row", columns="col", values="val", aggfunc='mean', fill_value=0
)

# Pivot using groupby and unstack
pivoted_df = df.groupby(['row', 'col'])['val'].mean().unstack(fill_value=0)

フラット化

ピボットされた DataFrame のマルチインデックスをフラット化するには、列のタイプに応じてさまざまなアプローチを使用できます:

列が文字列:

pivoted_df.columns = pivoted_df.columns.map('|'.join)

列がタプルの場合:

pivoted_df.columns = pivoted_df.columns.map('{0[0]}|{0[1]}'.format)

補足事項

  • ピボットする列を選択する場合、多数のデータを含む幅広いデータフレームが作成されることを避けるために、それらがカテゴリカルであるか、限られた数の一意の値を持つことを確認してください。
  • 集計関数を使用して欠損データを処理する場合は、フィル値に注意してください。
  • 大規模なデータセットの場合は、set_index や Factorize などのパフォーマンス向上手法の使用を検討してください。
  • 探索するデータをワイドからロングに転置する必要がある場合は、pandas.wide_to_long などの他のオプション形式。

以上がPandas で DataFrame を効率的にピボットするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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