インデックスに基づいて Pandas DataFrame をフィルタリングするには:

df_filter = df.filter(items=[index to keep], axis=0)

以下の DataFrame を作成したとします。

import pandas as pd

data = {
    "Product": ["Computer", "Printer", "Monitor", "Desk", "Phone", "Tablet", "Scanner"],
    "Price": [900, 200, 300, 450, 150, 250, 150],
}

df = pd.DataFrame(data)

print(df)

黄色で示されているように、インデックス値は 0 から始まり 6 で終わる左側にあります。

インデックスに基づいてPandas DataFrameをフィルタリングする 1

例1: インデックスに基づいてPandas DataFrameをフィルタリングする

他のすべての行を除外しながら、インデックスが2の行(「モニター」製品)を選択するには、次のようにします。

df_filter = df.filter(items=[2], axis=0)

完全な Python コードは次のようになります。

import pandas as pd

data = {
    "Product": ["Computer", "Printer", "Monitor", "Desk", "Phone", "Tablet", "Scanner"],
    "Price": [900, 200, 300, 450, 150, 250, 150],
}

df = pd.DataFrame(data)

df_filter = df.filter(items=[2], axis=0)

print(df_filter)

インデックスが 2 の行だけが保持され、他のすべての行はフィルター処理されていることに注意してください。

インデックスに基づいてPandas DataFrameをフィルタリングする 2

インデックス値に基づいて複数の行を保持したい場合はどうすればよいでしょうか?

たとえば、「モニター」(インデックス2)と「タブレット」(インデックス5)を保持するには、items = [2, 5]を設定します。

import pandas as pd

data = {
    "Product": ["Computer", "Printer", "Monitor", "Desk", "Phone", "Tablet", "Scanner"],
    "Price": [900, 200, 300, 450, 150, 250, 150],
}

df = pd.DataFrame(data)

df_filter = df.filter(items=[2, 5], axis=0)

print(df_filter)

これで、次の 2 つのアイテムが取得されます。

インデックスに基づいてPandas DataFrameをフィルタリングする 3

例2: 非数値インデックスでPandas DataFrameをフィルタリングする

次に、DataFrame に数値以外のインデックスを割り当てます。

index=["Item_A", "Item_B", "Item_C", "Item_D", "Item_E", "Item_F", "Item_G"]

新しい DataFrame は次のようになります。

import pandas as pd

data = {
    "Product": ["Computer", "Printer", "Monitor", "Desk", "Phone", "Tablet", "Scanner"],
    "Price": [900, 200, 300, 450, 150, 250, 150],
}

df = pd.DataFrame(
    data, index=["Item_A", "Item_B", "Item_C", "Item_D", "Item_E", "Item_F", "Item_G"]
)

print(df)

左側に非数値インデックスが表示されます。

インデックスに基づいてPandas DataFrameをフィルタリングする 4

「Item_C」のインデックスを持つ行を保持し、他のすべての項目を除外するには、次のようにします。

import pandas as pd

data = {
    "Product": ["Computer", "Printer", "Monitor", "Desk", "Phone", "Tablet", "Scanner"],
    "Price": [900, 200, 300, 450, 150, 250, 150],
}

df = pd.DataFrame(
    data, index=["Item_A", "Item_B", "Item_C", "Item_D", "Item_E", "Item_F", "Item_G"]
)

df_filter = df.filter(items=["Item_C"], axis=0)

print(df_filter)

ご覧のとおり、インデックスが「Item_C」の行のみが保持されます。

インデックスに基づいてPandas DataFrameをフィルタリングする 5

あるいは、like = “C” と設定することで、インデックスが “Item_C” の同じ行を選択することもできます (文字 “C” は他のインデックス値には表示されないため)。

import pandas as pd

data = {
    "Product": ["Computer", "Printer", "Monitor", "Desk", "Phone", "Tablet", "Scanner"],
    "Price": [900, 200, 300, 450, 150, 250, 150],
}

df = pd.DataFrame(
    data, index=["Item_A", "Item_B", "Item_C", "Item_D", "Item_E", "Item_F", "Item_G"]
)

df_filter = df.filter(like="C", axis=0)

print(df_filter)

結果は「Item_C」のインデックスを持つ同じ行になります。

インデックスに基づいてPandas DataFrameをフィルタリングする 6