【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の行は自動的に削除されます。
-
Pandasで既存のDataFrameに新しい列を追加する3つの方法
はじめにこのチュートリアルでは、Pythonのデータ分析ライブラリ「pandas」において、既存のDataFrameに新しい列を追加する方法を解説します。新しい列を追加するアプローチは複数あり、それぞれに特徴があります。ここでは代表的な3つの方法を、コード例と実行結果とともに順番に見ていきましょう。方法1:リストを使って追加する最もシンプルなのが、Pythonのリストをそのまま列として代入する方法です。以下の手順で行います。手順辞書を使ってDataFrameを作成する。新しい列のデータを含むリストを作成する。リストの長さが、すでにDataFrame内にあるデータの行数と一致している必要がある点
-
【Python】PandasのDataFrameで列の文字列を大文字に変換する方法
このチュートリアルでは、PandasのDataFrame(データフレーム)内の特定の列(例えば名前の列)をすべて大文字に変換する方法を解説します。主な方法は2つあり、それぞれコード例と実行結果とともに紹介します。方法1:str.upper() を使う方法Pandasでは、文字列型(object型)の列に対して .str アクセサを使うことで、Python標準の文字列メソッドを各要素に一括適用できます。大文字への変換には str.upper() を使用します。コード例# pandasパッケージをインポート import pandas as pd # DataFrame用のデータ data =