インデックスに基づいて 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 で終わる左側にあります。

例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 の行だけが保持され、他のすべての行はフィルター処理されていることに注意してください。

インデックス値に基づいて複数の行を保持したい場合はどうすればよいでしょうか?
たとえば、「モニター」(インデックス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 つのアイテムが取得されます。

例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)
左側に非数値インデックスが表示されます。

「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」の行のみが保持されます。

あるいは、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」のインデックスを持つ同じ行になります。
