unstack関数の基本的な使い方
Pandasのunstack
関数は、階層型インデックス(MultiIndex)を持つデータフレームやシリーズに対して使用します。この関数は、特定のレベルのインデックスを列に変換することで、データの形状を変更します。
以下に基本的な使い方を示します。
import pandas as pd
# MultiIndexを持つデータフレームを作成
index = pd.MultiIndex.from_tuples([(i, j) for i in range(5) for j in range(5)])
df = pd.DataFrame({'Value': range(25)}, index=index)
df.index.names = ['Level1', 'Level2']
print("Original DataFrame:")
print(df)
# unstack関数を使用
df_unstacked = df.unstack()
print("Unstacked DataFrame:")
print(df_unstacked)
このコードでは、unstack
関数がLevel2
のインデックスを列に変換します。結果として得られるデータフレームdf_unstacked
は、Level1
が行のインデックス、Level2
が列のインデックスとなります。
unstack
関数は、データの再形成に非常に便利なツールであり、データ分析において頻繁に使用されます。ただし、適切に使用するためには、MultiIndexとその動作について理解しておくことが重要です。次のセクションでは、単一列と複数列構造 (MultiIndex)の違いについて詳しく説明します。
単一列と複数列構造 (MultiIndex)の違い
Pandasのデータフレームは、一般的に単一の列と行のラベルを持つ2次元のデータ構造です。しかし、PandasはMultiIndex
という強力な機能を提供しており、これにより複数のレベルのインデックスを持つことが可能になります。
単一列のデータフレーム
単一列のデータフレームは最も一般的な形式で、各行と列には一意のラベルがあります。以下に例を示します。
import pandas as pd
# 単一列のデータフレームを作成
df_single = pd.DataFrame({'A': range(5), 'B': range(5, 10)})
print(df_single)
このデータフレームでは、列ラベルは'A'
と'B'
、行ラベルは0から4までの整数です。
複数列構造 (MultiIndex)のデータフレーム
一方、MultiIndex
を使用すると、データフレームは複数のレベルのインデックスを持つことができます。これにより、より複雑なデータ構造を表現することが可能になります。
import pandas as pd
# MultiIndexを持つデータフレームを作成
index = pd.MultiIndex.from_tuples([(i, j) for i in range(5) for j in range(5)])
df_multi = pd.DataFrame({'Value': range(25)}, index=index)
df_multi.index.names = ['Level1', 'Level2']
print(df_multi)
このデータフレームでは、行インデックスはLevel1
とLevel2
の2つのレベルを持ちます。これにより、データは2つの次元(Level1
とLevel2
)に沿って整理されます。
unstack
関数は、このようなMultiIndex
を持つデータフレームに対して特に有用です。次のセクションでは、unstack
関数のパラメータ詳細について詳しく説明します。
unstack関数のパラメータ詳細
Pandasのunstack
関数は、データフレームやシリーズの階層型インデックス(MultiIndex)を列に変換します。この関数は以下のような形式で使用します。
DataFrame.unstack(level=-1, fill_value=None)
ここで、level
とfill_value
はunstack
関数の主要なパラメータです。
levelパラメータ
level
パラメータは、列に変換するインデックスのレベルを指定します。デフォルトは最後のレベル(-1
)です。
level
が整数の場合、そのレベルのインデックスが列に変換されます。level
がラベル名の場合、そのラベルのインデックスが列に変換されます。
fill_valueパラメータ
fill_value
パラメータは、欠損値を置き換える値を指定します。デフォルトはNone
で、これは欠損値をそのまま保持します。
以下に、これらのパラメータを使用した例を示します。
import pandas as pd
# MultiIndexを持つデータフレームを作成
index = pd.MultiIndex.from_tuples([(i, j) for i in range(5) for j in range(5)])
df = pd.DataFrame({'Value': range(25)}, index=index)
df.index.names = ['Level1', 'Level2']
# unstack関数を使用
df_unstacked = df.unstack(level='Level1', fill_value=0)
print(df_unstacked)
このコードでは、unstack
関数がLevel1
のインデックスを列に変換し、欠損値を0で置き換えます。次のセクションでは、unstack
関数の実用例について詳しく説明します。
unstack関数の実用例
Pandasのunstack
関数は、データの再形成に非常に便利なツールであり、データ分析において頻繁に使用されます。以下に、unstack
関数の実用例を示します。
import pandas as pd
# データフレームを作成
data = {
'State': ['California', 'California', 'New York', 'New York', 'Texas', 'Texas'],
'Year': [2000, 2010, 2000, 2010, 2000, 2010],
'Population': [33871648, 37253956, 18976457, 19378102, 20851820, 25145561]
}
df = pd.DataFrame(data)
# 'State'と'Year'をインデックスに設定
df = df.set_index(['State', 'Year'])
print("Original DataFrame:")
print(df)
# unstack関数を使用
df_unstacked = df.unstack()
print("Unstacked DataFrame:")
print(df_unstacked)
このコードでは、unstack
関数がYear
のインデックスを列に変換します。結果として得られるデータフレームdf_unstacked
は、State
が行のインデックス、Year
が列のインデックスとなります。これにより、各州の人口を年ごとに比較することが容易になります。
このように、unstack
関数は、データの構造を変更し、データ分析を容易にするための強力なツールです。ただし、適切に使用するためには、データの構造とunstack
関数の動作について理解しておくことが重要です。この記事がその理解の一助となれば幸いです。以上が、Pandasのunstack
関数の詳細解説となります。ご覧いただきありがとうございました。次回もお楽しみに!