unstack関数の基本

Pandasのunstack関数は、マルチインデックスのデータフレームやシリーズを再形成するための強力なツールです。この関数は、特定のレベルのインデックスを列に変換します。

以下に基本的な使用方法を示します。

import pandas as pd

# マルチインデックスのデータフレームを作成
index = pd.MultiIndex.from_tuples([(i, j) for i in range(5) for j in range(5)])
df = pd.DataFrame({'A': range(25)}, index=index)
df.index.names = ['level_1', 'level_2']

# unstack関数を使用
df_unstacked = df.unstack()

print(df_unstacked)

このコードは、マルチインデックスのデータフレームを作成し、unstack関数を使用してlevel_2のインデックスを列に変換します。結果は、level_1が行のインデックス、level_2が列のインデックスとなる新しいデータフレームです。

unstack関数は、データの再形成に非常に便利で、データ分析の多くのシナリオで使用されます。次のセクションでは、2レベルでのunstackの使用について詳しく説明します。

2レベルでのunstackの使用

unstack関数は、複数のレベルに対しても使用することができます。これは、マルチインデックスが2つ以上のレベルを持つ場合に特に便利です。

以下に、2レベルでのunstackの使用方法を示します。

import pandas as pd

# マルチインデックスのデータフレームを作成
index = pd.MultiIndex.from_tuples([(i, j, k) for i in range(3) for j in range(3) for k in range(3)])
df = pd.DataFrame({'A': range(27)}, index=index)
df.index.names = ['level_1', 'level_2', 'level_3']

# unstack関数を2レベルで使用
df_unstacked = df.unstack(level=['level_2', 'level_3'])

print(df_unstacked)

このコードは、3レベルのマルチインデックスのデータフレームを作成し、unstack関数を使用してlevel_2level_3のインデックスを列に変換します。結果は、level_1が行のインデックス、level_2level_3が列のインデックスとなる新しいデータフレームです。

2レベルでのunstackは、より複雑なデータ構造を扱う際に非常に有用です。しかし、注意点とトラブルシューティングも必要です。次のセクションでは、これらについて詳しく説明します。

実用的な例

ここでは、実際のデータセットを使用して、2レベルでのunstack関数の使用方法を示します。この例では、都市ごと、年ごとの気温データを扱います。

import pandas as pd

# データセットの作成
data = {
    'City': ['Tokyo', 'Tokyo', 'Tokyo', 'Osaka', 'Osaka', 'Osaka'],
    'Year': [2001, 2002, 2003, 2001, 2002, 2003],
    'Temperature': [20, 21, 19, 25, 24, 26]
}
df = pd.DataFrame(data)

# CityとYearをインデックスに設定
df.set_index(['City', 'Year'], inplace=True)

# unstack関数を使用
df_unstacked = df.unstack(level='Year')

print(df_unstacked)

このコードは、都市と年をインデックスとするデータフレームを作成し、unstack関数を使用して年を列に変換します。結果は、都市が行のインデックス、年が列のインデックスとなる新しいデータフレームです。

このように、unstack関数は、データを再形成し、異なる視点からデータを分析するのに非常に有用です。しかし、unstack関数を使用する際には、いくつかの注意点とトラブルシューティングが必要です。次のセクションでは、これらについて詳しく説明します。

注意点とトラブルシューティング

unstack関数を使用する際には、以下のようないくつかの注意点とトラブルシューティングがあります。

  1. 欠損データ: unstack関数を使用すると、元のデータに存在しない組み合わせに対してNaNが生成される可能性があります。これは、特定のインデックスの組み合わせが元のデータに存在しない場合に発生します。この問題を解決するためには、fillna関数を使用してNaNを適切な値に置き換えることができます。
df_unstacked = df.unstack(level='Year').fillna(0)
  1. レベルの指定: unstack関数には、levelパラメータを使用して、列に変換するインデックスのレベルを指定します。レベルは、0から始まるインデックス番号またはインデックス名で指定できます。複数のレベルを指定する場合は、リストで指定します。

  2. データ型: unstack関数を使用すると、データ型が変更される可能性があります。これは、元のデータが整数型であっても、NaNが生成されると浮動小数点型に変換されるためです。必要に応じて、astype関数を使用してデータ型を変換することができます。

以上が、unstack関数を使用する際の主な注意点とトラブルシューティングです。これらを理解しておけば、unstack関数をより効果的に使用することができます。

投稿者 kitagawa

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です