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']
# unstack関数を使用
df_unstacked = df.unstack(level='Level2')
print(df_unstacked)
このコードは、Level2
のインデックスを列に展開します。結果として得られるデータフレームdf_unstacked
は、Level2
の各値が列として表示され、元のValue
列が各セルの値となります。
unstack
関数は、データの再形成と集約に非常に便利で、データ分析の多くの側面で使用されます。次のセクションでは、単一列のunstack
の具体的な例を見ていきましょう。
単一列のunstackの例
それでは、具体的な例を通じて単一列のunstack
操作を見てみましょう。
import pandas as pd
# マルチインデックスのデータフレームを作成
index = pd.MultiIndex.from_tuples([(i, j) for i in ['A', 'B', 'C'] for j in range(1, 4)])
df = pd.DataFrame({'Value': range(1, 10)}, index=index)
df.index.names = ['Letter', 'Number']
print("Original DataFrame:")
print(df)
# 'Number'レベルをunstack
df_unstacked = df.unstack(level='Number')
print("\nDataFrame after unstacking 'Number':")
print(df_unstacked)
このコードは、Number
レベルをunstackして、各Letter
に対してNumber
の各値が列となる新しいデータフレームを作成します。このように、unstack
関数は、マルチインデックスのデータフレームを再形成し、特定のレベルのインデックスを列に展開することができます。
次のセクションでは、unstack
関数の詳細なパラメータについて見ていきましょう。
unstack関数の詳細なパラメータ
Pandasのunstack
関数は、以下の主要なパラメータを持っています。
DataFrame.unstack(level=-1, fill_value=None)
-
level
: int, str, or list of these, default last level (optional)unstack
するインデックスのレベルを指定します。デフォルトは最後のレベルです。レベルは整数、レベル名、またはこれらのリストで指定できます。
-
fill_value
: scalar value, default None (optional)unstack
操作によって新たに作成される欠損値を埋めるための値を指定します。デフォルトはNoneで、欠損値はNaNとして保持されます。
以下に、これらのパラメータを使用した例を示します。
import pandas as pd
# マルチインデックスのデータフレームを作成
index = pd.MultiIndex.from_tuples([(i, j) for i in ['A', 'B', 'C'] for j in range(1, 4)])
df = pd.DataFrame({'Value': range(1, 10)}, index=index)
df.index.names = ['Letter', 'Number']
print("Original DataFrame:")
print(df)
# 'Letter'レベルをunstackし、欠損値を0で埋める
df_unstacked = df.unstack(level='Letter', fill_value=0)
print("\nDataFrame after unstacking 'Letter' with fill_value=0:")
print(df_unstacked)
このコードは、Letter
レベルをunstackし、新たに作成される欠損値を0で埋めます。このように、unstack
関数のパラメータを適切に使用することで、データの再形成をより柔軟に行うことができます。
次のセクションでは、unstack
関数の応用例について見ていきましょう。
unstack関数の応用例
それでは、unstack
関数の応用例を見てみましょう。ここでは、時間シリーズデータの再形成にunstack
関数を使用します。
import pandas as pd
import numpy as np
# 日付範囲を作成
dates = pd.date_range('2024-01-01', periods=6)
# ランダムなデータを持つデータフレームを作成
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
# 'A'列を基準にデータフレームを再形成
df['month'] = df.index.month
df['year'] = df.index.year
# 'month'と'year'をインデックスに設定
df.set_index(['month', 'year'], inplace=True)
# 'A'列をunstack
df_unstacked = df['A'].unstack(level='year')
print(df_unstacked)
このコードは、時間シリーズデータを月と年でグループ化し、A
列の値を年ごとに展開します。これにより、各月のA
列の値を年ごとに比較することができます。
このように、unstack
関数は、データの再形成と集約に非常に便利で、データ分析の多くの側面で使用されます。