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({'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
関数は、データの再形成に非常に便利で、特に階層型インデックスを持つデータの操作において強力なツールとなります。ただし、どのレベルのインデックスを列に変換するか、またその結果がどのようにデータフレームの形状に影響を与えるかを理解することが重要です。これらの点については、次の小見出しで詳しく説明します。
単一列と複数列構造でのunstack関数の適用
Pandasのunstack
関数は、単一列構造だけでなく、複数列構造にも適用可能です。これにより、より複雑なデータ構造を扱うことができます。
以下に、複数列構造での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({'Value1': range(25), 'Value2': range(25, 50)}, 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
関数は単一列構造だけでなく、複数列構造にも適用可能で、データの再形成に非常に便利です。ただし、どのレベルのインデックスを列に変換するか、またその結果がどのようにデータフレームの形状に影響を与えるかを理解することが重要です。これらの点については、次の小見出しで詳しく説明します。
unstack関数のパラメータについて
Pandasのunstack
関数は、以下のような形式で使用します。
DataFrame.unstack(level=-1, fill_value=None)
ここで、level
とfill_value
はunstack
関数の主要なパラメータです。
-
level
: int, str, or list of these, default -1 (last level)unstack
するインデックスのレベルを指定します。デフォルトは最後のレベルです。- レベルは整数、文字列、またはこれらのリストで指定できます。リストを指定した場合、指定した順序で
unstack
が行われます。
-
fill_value
: scalar value, default Noneunstack
操作によって新たに生成される欠損値を埋めるための値を指定します。デフォルトはNoneで、欠損値はそのまま保持されます。
以下に、これらのパラメータを使用した例を示します。
import pandas as pd
# 階層型インデックスを持つデータフレームを作成
index = pd.MultiIndex.from_tuples([(i, j) for i in range(3) for j in range(3)])
df = pd.DataFrame({'Value': range(9)}, index=index)
df.index.names = ['Level1', 'Level2']
print("Original DataFrame:")
print(df)
# unstack関数を使用(level=0を指定)
df_unstacked = df.unstack(level=0, fill_value=0)
print("Unstacked DataFrame (level=0):")
print(df_unstacked)
このコードでは、unstack
関数がLevel1
のインデックスを列に変換し、fill_value
パラメータにより新たに生成される欠損値が0で埋められます。結果として得られるデータフレームdf_unstacked
は、Level2
が行のインデックス、Level1
が列のインデックスとなります。
以上が、Pandasのunstack
関数のパラメータについての説明です。この関数を理解し活用することで、データの再形成や操作がより柔軟に行えます。次の小見出しでは、具体的な例を通じてunstack
関数の使い方を詳しく見ていきます。
unstack関数を使った具体的な例
ここでは、Pandasのunstack
関数を使った具体的な例を見ていきます。この例では、階層型インデックスを持つデータフレームから、新たなデータフレームを生成します。
import pandas as pd
# 階層型インデックスを持つデータフレームを作成
index = pd.MultiIndex.from_tuples([(i, j) for i in range(3) for j in range(3)])
df = pd.DataFrame({'Value': range(9)}, 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
関数のlevel
パラメータを指定することで、どのレベルのインデックスを列に変換するかを制御することができます。以下に、level=0
を指定した例を示します。
# unstack関数を使用(level=0を指定)
df_unstacked_level0 = df.unstack(level=0)
print("Unstacked DataFrame (level=0):")
print(df_unstacked_level0)
このコードでは、unstack
関数がLevel1
のインデックスを列に変換し、新たなデータフレームdf_unstacked_level0
を生成します。このデータフレームは、Level2
が行のインデックス、Level1
が列のインデックスとなります。
以上が、Pandasのunstack
関数を使った具体的な例です。この関数を理解し活用することで、データの再形成や操作がより柔軟に行えます。この記事が、unstack
関数の理解と活用に役立つことを願っています。それでは、Happy Data Wrangling!