Python – Pandasデータフレームのマルチレベル列インデックスから複数のレベルを削除する方法
マルチレベル(階層型)の列インデックスから複数のレベルを削除したい場合は、columns.droplevel() を繰り返し使用します。列方向にインデックスを作成するには、MultiIndex.from_tuples() を利用します。
まず、タプルを使って列方向のマルチインデックスを作成します。
items = pd.MultiIndex.from_tuples([("Col 1", "Col 1", "Col 1"),("Col 2", "Col 2", "Col 2"),("Col 3", "Col 3", "Col 3")])マルチインデックスデータフレームの作成
次に、複数のNumPy配列からなるマルチインデックス用の配列を用意し、それをもとにマルチインデックスのデータフレームを作成します。
arr = [np.array(['car', 'car', 'car','bike','bike', 'bike', 'truck', 'truck', 'truck']), np.array(['valueA', 'valueB', 'valueC','valueA', 'valueB', 'valueC','valueA', 'valueB', 'valueC'])] # マルチインデックスデータフレームの作成 dataFrame = pd.DataFrame(np.random.randn(9, 3), index=arr,columns=items)
インデックスへのラベル付け
行インデックスには分かりやすいように名前を付けておきましょう。
dataFrame.index.names = ['level 0', 'level 1']
レベルの削除方法
インデックス位置0にあるレベルを削除するには、以下のように droplevel(0) を指定します。
dataFrame.columns = dataFrame.columns.droplevel(0)
これで位置0のレベルが削除されました。削除後は、元のレベル1が新しいレベル0になります。さらに別のレベルも削除したい場合は、同じコードをもう一度実行するだけです。
dataFrame.columns = dataFrame.columns.droplevel(0)
このように droplevel() を繰り返し呼び出すことで、マルチレベル列インデックスから必要な数だけレベルを取り除くことができます。
サンプルコード
以下に、ここまでの手順をまとめた完全なコード例を示します。
import numpy as np
import pandas as pd
items = pd.MultiIndex.from_tuples([("Col 1", "Col 1", "Col 1"),("Col 2", "Col 2", "Col 2"),("Col 3", "Col 3", "Col 3")])
# マルチインデックス用の配列
arr = [np.array(['car', 'car', 'car','bike','bike', 'bike', 'truck', 'truck', 'truck']),
np.array(['valueA', 'valueB', 'valueC','valueA', 'valueB', 'valueC','valueA', 'valueB', 'valueC'])]
# マルチインデックスデータフレームの作成
dataFrame = pd.DataFrame(np.random.randn(9, 3), index=arr,columns=items)
# インデックスにラベルを付ける
dataFrame.index.names = ['one', 'two']
print("DataFrame...\n",dataFrame)
print("\nDropping a level...\n")
dataFrame.columns = dataFrame.columns.droplevel(0)
print("Updated DataFrame..\n",dataFrame)
print("\nDropping another level...\n")
dataFrame.columns = dataFrame.columns.droplevel(0)
print("Updated DataFrame..\n",dataFrame)実行結果
上記のコードを実行すると、次のような出力が得られます。
DataFrame...
Col 1 Col 2 Col 3
Col 1 Col 2 Col 3
Col 1 Col 2 Col 3
one two
car valueA 0.425077 0.020606 1.148156
valueB -1.720355 0.502863 1.184753
valueC 0.373106 1.300935 -0.128404
bike valueA -0.648708 0.944725 0.593327
valueB -0.613921 -0.238730 -0.218448
valueC 0.313042 -0.628065 0.910935
truck valueA 0.286377 0.478067 -1.000645
valueB 1.151793 -0.171433 -0.612346
valueC -1.358061 0.735075 0.092700
Dropping a level...
Updated DataFrame..
Col 1 Col 2 Col 3
Col 1 Col 2 Col 3
one two
car valueA 0.425077 0.020606 1.148156
valueB -1.720355 0.502863 1.184753
valueC 0.373106 1.300935 -0.128404
bike valueA -0.648708 0.944725 0.593327
valueB -0.613921 -0.238730 -0.218448
valueC 0.313042 -0.628065 0.910935
truck valueA 0.286377 0.478067 -1.000645
valueB 1.151793 -0.171433 -0.612346
valueC -1.358061 0.735075 0.092700
Dropping another level...
Updated DataFrame..
Col 1 Col 2 Col 3
one two
car valueA 0.425077 0.020606 1.148156
valueB -1.720355 0.502863 1.184753
valueC 0.373106 1.300935 -0.128404
bike valueA -0.648708 0.944725 0.593327
valueB -0.613921 -0.238730 -0.218448
valueC 0.313042 -0.628065 0.910935
truck valueA 0.286377 0.478067 -1.000645
valueB 1.151793 -0.171433 -0.612346
valueC -1.358061 0.735075 0.092700-
Python・PandasのDataFrameから複数の列を選択する方法
Pandasでは、CSVファイルから読み込んだDataFrameに対して、二重の角括弧 [[ ]] を使うことで、複数の列を簡単に選択できます。本記事では、具体的な手順とサンプルコードを交えて解説します。 前提:サンプルデータについて ここでは、Microsoft Excelで開いた以下のような内容のCSVファイル(SalesData.csv)を例にします。このデータには「Car(車名)」「Reg_Price(登録価格)」「Units(台数)」の3つの列が含まれています。 ステップ1:CSVファイルをPandas DataFrameに読み込む まず、read_csv() メソッドを使って、C
-
【Python】Pandas DataFrameからnull(欠損値)行を削除する方法|dropna()の使い方
PandasのDataFrameからnull(NaN)行を削除するには、dropna()メソッドを使用します。この記事では、NaNを含むCSVファイルを読み込み、dropna()で欠損値を含む行を取り除くまでの手順を、サンプルコードと実行結果とともにわかりやすく解説します。前提:NaNを含むCSVファイル今回の例では、一部にNaN(null値)が含まれる以下のようなCSVファイル(CarRecords.csv)を使用します。手順1:read_csv()でCSVファイルを読み込むまずpandasをインポートし、read_csv()を使ってCSVファイルを読み込みます。ここではデスクトップ上に保存