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

PythonでマルチインデックスのPandas DataFrameから特定の行を削除する方法

マルチインデックス(MultiIndex)を持つPandas DataFrameから特定の行を削除するには、drop()メソッドを使用します。このメソッドに行ラベル(タプル形式)とaxis=0を指定することで、目的の行を簡単に取り除くことができます。

マルチインデックスDataFrameの作成

まず、マルチインデックス用の配列を作成します。第1レベルに「car」「bike」「truck」、第2レベルに「valueA」「valueB」「valueC」を設定します。

arr = [np.array(['car', 'car', 'car', 'bike', 'bike', 'bike', 'truck', 'truck', 'truck']),
    np.array(['valueA', 'valueB', 'valueC', 'valueA', 'valueB', 'valueC', 'valueA', 'valueB', 'valueC'])]

次に、この配列をインデックスとして持つマルチインデックスDataFrameを作成し、インデックス名を設定します。

dataFrame = pd.DataFrame(
    np.random.randn(9, 3), index=arr, columns=['Col 1', 'Col 2', 'Col 3'])

dataFrame.index.names = ['level 0', 'level 1']

特定の行を削除する

行を削除するには、削除したい行のタプル(レベル0の値, レベル1の値)をdrop()メソッドに渡します。axis=0は行方向の操作を意味し、inplace=Trueを指定すると元のDataFrameが直接変更されます。

dataFrame.drop(('car','valueA'), axis=0, inplace=True)

この例では、「car」グループの中の「valueA」行だけが削除されます。

完全なサンプルコード

以下に、実行可能な完全なコードを示します。

import numpy as np
import pandas as pd

# マルチインデックス用の配列
arr = [np.array(['car', 'car', 'car', 'bike', 'bike', 'bike', 'truck', 'truck', 'truck']),
    np.array(['valueA', 'valueB', 'valueC', 'valueA', 'valueB', 'valueC', 'valueA', 'valueB', 'valueC'])]

# マルチインデックスDataFrameの作成
dataFrame = pd.DataFrame(
    np.random.randn(9, 3), index=arr, columns=['Col 1', 'Col 2', 'Col 3'])

dataFrame.index.names = ['level 0', 'level 1']
print(dataFrame)

print("\n特定の行を削除中...\n")
dataFrame.drop(('car','valueA'), axis=0, inplace=True)
print(dataFrame)

実行結果

上記のコードを実行すると、次のような出力が得られます(乱数を使用しているため、数値は毎回異なります)。

                     Col 1       Col 2       Col 3
level 0 level 1
car     valueA     0.845965   -0.850953   -0.335662
        valueB     0.534764   -0.107635    1.008855
        valueC    -0.507910   -0.664625    1.671653
bike    valueA    -0.475751   -0.244113    0.672352
        valueB    -0.273670    1.118635    0.428750
        valueC    -1.064504   -0.344729    0.481037
truck   valueA    -0.508659    1.352390    1.382799
        valueB     1.144299   -0.092568   -1.071624
        valueC    -0.710767    0.967018   -0.047430

特定の行を削除中...

                    Col 1      Col 2      Col 3
level 0 level 1
car     valueB     0.534764  -0.107635   1.008855
        valueC    -0.507910  -0.664625   1.671653
bike    valueA    -0.475751  -0.244113   0.672352
        valueB    -0.273670   1.118635   0.428750
        valueC    -1.064504  -0.344729   0.481037
truck   valueA    -0.508659   1.352390   1.382799
        valueB     1.144299  -0.092568  -1.071624
        valueC    -0.710767   0.967018  -0.047430

ポイントまとめ

  • drop()メソッドでタプル形式のインデックスを指定すると、マルチインデックスの特定の行を削除できる
  • axis=0は行の削除、axis=1は列の削除を意味する
  • inplace=Trueを指定すると元のDataFrameが直接更新され、戻り値を受け取る必要がない
  • 複数の行を同時に削除したい場合は、タプルのリストを渡すことも可能(例:dataFrame.drop([('car','valueA'), ('bike','valueB')], axis=0)
  1. Python Pandas入門 – データフレームから条件に合う行のサブセットを抽出する方法

    Pandasのデータフレームから行のサブセット(一部の行)を取得するには、条件式を使ってデータを絞り込みます。この手法は「ブールインデックス参照」と呼ばれ、データ分析で最もよく使われる操作のひとつです。 使用するCSVファイル ここでは、Microsoft Excelで開いた次のようなCSVファイル(SalesData.csv)を例にします。車種名(Car)、登録価格(Reg_Price)、販売台数(Units)の3つの列を持つデータです。 CSVファイルをデータフレームとして読み込む まず、read_csv()メソッドを使って、CSVファイルのデータをPandasのデータフレームに読み込み

  2. 【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ファイルを読み込みます。ここではデスクトップ上に保存