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_2
とlevel_3
のインデックスを列に変換します。結果は、level_1
が行のインデックス、level_2
とlevel_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
関数を使用する際には、以下のようないくつかの注意点とトラブルシューティングがあります。
- 欠損データ:
unstack
関数を使用すると、元のデータに存在しない組み合わせに対してNaNが生成される可能性があります。これは、特定のインデックスの組み合わせが元のデータに存在しない場合に発生します。この問題を解決するためには、fillna
関数を使用してNaNを適切な値に置き換えることができます。
df_unstacked = df.unstack(level='Year').fillna(0)
-
レベルの指定:
unstack
関数には、level
パラメータを使用して、列に変換するインデックスのレベルを指定します。レベルは、0から始まるインデックス番号またはインデックス名で指定できます。複数のレベルを指定する場合は、リストで指定します。 -
データ型:
unstack
関数を使用すると、データ型が変更される可能性があります。これは、元のデータが整数型であっても、NaNが生成されると浮動小数点型に変換されるためです。必要に応じて、astype
関数を使用してデータ型を変換することができます。
以上が、unstack
関数を使用する際の主な注意点とトラブルシューティングです。これらを理解しておけば、unstack
関数をより効果的に使用することができます。