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関数は、データの再形成と集約に非常に便利で、データ分析の多くの側面で使用されます。

投稿者 kitagawa

コメントを残す

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