Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python・Pandas】DataFrameのマルチレベル列をstack()メソッドでスタックする方法

PandasのDataFrameでマルチレベル(階層型)の列をスタックするには、stack()メソッドを使用します。stack()は、列方向に並んでいたデータを行インデックス方向へ回転させ、ワイド形式からロング形式へ変換できる便利なメソッドです。

1. 必要なライブラリをインポートする

まず、pandasをインポートします。

import pandas as pd

2. マルチレベルの列を作成する

pd.MultiIndex.from_tuples()にタプルのリストを渡すことで、マルチレベルの列を作成できます。

items = pd.MultiIndex.from_tuples([
    ('Maths', 'Mental Maths'),
    ('Maths', 'Discrete Mathematics'),
    ('Maths', 'Applied Mathematics')
])

この例では、上位レベルに「Maths」、その下に「Mental Maths」「Discrete Mathematics」「Applied Mathematics」という3つのサブカテゴリを持つ2階層の列構造を定義しています。

3. DataFrameを作成し、マルチレベルの列を設定する

次に、作成したマルチレベルの列をcolumns引数に指定してDataFrameを生成します。

dataFrame = pd.DataFrame(
    [[67, 86, 78], [56, 92, 97], [92, 95, 91]],
    index=['John', 'Tom', 'Henry'],
    columns=items
)

4. マルチレベルの列をスタックする

stack()メソッドを呼び出すだけで、最も内側の列レベルが行インデックス側へ移動し、列がスタックされます。

dataFrame.stack()

完全なコード例

以下に、ここまでの手順をまとめた完全なコードを示します。

import pandas as pd

# マルチレベルの列を作成
items = pd.MultiIndex.from_tuples([
    ('Maths', 'Mental Maths'),
    ('Maths', 'Discrete Mathematics'),
    ('Maths', 'Applied Mathematics')
])

# DataFrameを作成
dataFrame = pd.DataFrame(
    [[67, 86, 78], [56, 92, 97], [92, 95, 91]],
    index=['John', 'Tom', 'Henry'],
    columns=items
)

# DataFrameを表示
print("DataFrame...\n", dataFrame)

# マルチレベルの列をスタック
print("\nStacking...\n", dataFrame.stack())

実行結果

上記のコードを実行すると、次のような出力が得られます。

DataFrame...
                Maths
      Mental Maths Discrete Mathematics Applied Mathematics
John             67                   86                  78
Tom              56                   92                  97
Henry            92                   95                  91

Stacking...
                             Maths
John  Applied Mathematics       78
      Discrete Mathematics      86
      Mental Maths              67
Tom   Applied Mathematics       97
      Discrete Mathematics      92
      Mental Maths              56
Henry Applied Mathematics       91
      Discrete Mathematics      95
      Mental Maths              92

ポイントのまとめ

  • stack()は、列ラベルを最も内側の行インデックスレベルへピボットするメソッドです。
  • マルチレベルの列に対して実行すると、内側のレベル(この例では科目名)が行インデックスに移動します。
  • 逆の操作(アンスタック)にはunstack()を使用します。
  • 欠損値が含まれる場合、デフォルト設定(dropna=True)ではNaNの行は自動的に削除されます。
  1. Pandasで既存のDataFrameに新しい列を追加する3つの方法

    はじめにこのチュートリアルでは、Pythonのデータ分析ライブラリ「pandas」において、既存のDataFrameに新しい列を追加する方法を解説します。新しい列を追加するアプローチは複数あり、それぞれに特徴があります。ここでは代表的な3つの方法を、コード例と実行結果とともに順番に見ていきましょう。方法1:リストを使って追加する最もシンプルなのが、Pythonのリストをそのまま列として代入する方法です。以下の手順で行います。手順辞書を使ってDataFrameを作成する。新しい列のデータを含むリストを作成する。リストの長さが、すでにDataFrame内にあるデータの行数と一致している必要がある点

  2. 【Python】PandasのDataFrameで列の文字列を大文字に変換する方法

    このチュートリアルでは、PandasのDataFrame(データフレーム)内の特定の列(例えば名前の列)をすべて大文字に変換する方法を解説します。主な方法は2つあり、それぞれコード例と実行結果とともに紹介します。方法1:str.upper() を使う方法Pandasでは、文字列型(object型)の列に対して .str アクセサを使うことで、Python標準の文字列メソッドを各要素に一括適用できます。大文字への変換には str.upper() を使用します。コード例# pandasパッケージをインポート import pandas as pd # DataFrame用のデータ data =