HOWTO · Pandas

複数の条件で Pandas DataFrame をフィルタリング

このチュートリアルでは、複数の条件に基づいて DataFrame からエントリをフィルタリングする方法について説明します。

このページの内容

このチュートリアルでは、複数の条件に基づいて DataFrame からエントリをフィルタリングする方法を説明します。

この記事では、以下の DataFrame を使用します。

import pandas as pd

stocks_df = pd.DataFrame(
    {
        "Stock": ["Tesla", "Moderna Inc", "Facebook", "Boeing"],
        "Price": [835, 112, 267, 209],
        "Sector": ["Technology", "Health Technology", "Technology", "Aircraft"],
    }
)

print(stocks_df)

出力:

         Stock  Price             Sector
0        Tesla    835         Technology
1  Moderna Inc    112  Health Technology
2     Facebook    267         Technology
3       Boeing    209           Aircraft

インデックスを使用して複数の条件に基づいて DataFrame のエントリをフィルタリングする

import pandas as pd

stocks_df = pd.DataFrame(
    {
        "Stock": ["Tesla", "Moderna Inc", "Facebook", "Boeing"],
        "Price": [835, 112, 267, 209],
        "Sector": ["Technology", "Health Technology", "Technology", "Aircraft"],
    }
)

print("Stocks DataFrame:")
print(stocks_df, "\n")

reqd_stocks = stocks_df[(stocks_df.Sector == "Technology") & (stocks_df.Price < 500)]

print("The stocks of technology sector with price less than 500 are:")
print(reqd_stocks)

出力:

Stocks DataFrame:
         Stock  Price             Sector
0        Tesla    835         Technology
1  Moderna Inc    112  Health Technology
2     Facebook    267         Technology
3       Boeing    209           Aircraft

The stocks of technology sector with price less than 500 are:
      Stock  Price      Sector
2  Facebook    267  Technology

stocks_df の Sector カラムの値が Technology であり、Price カラムの値が 500 以下であるすべてのエントリをフィルタリングします。

これらの条件を & 演算子や | 演算子で結び、[] 内で条件を指定することで、複数の条件に基づいて値をインデックス化することができます。演算子 & はロジック and を表し、エントリを選択するためには両方の条件が真でなければならないことを意味します。演算子 | は論理 or を表し、いずれかの条件が満たされた場合に項目を選択することを意味します。

query() メソッドを用いた複数の条件に基づく DataFrame のエントリのフィルタリング

演算子 & や | で接続された複数の条件を query() メソッドの引数に渡します。

import pandas as pd

stocks_df = pd.DataFrame(
    {
        "Stock": ["Tesla", "Moderna Inc", "Facebook", "Boeing"],
        "Price": [835, 112, 267, 209],
        "Sector": ["Technology", "Health Technology", "Technology", "Aircraft"],
    }
)
print("Stocks DataFrame:")
print(stocks_df, "\n")

reqd_stocks = stocks_df.query("Sector == 'Technology' & Price <500")

print("The stocks of technology sector with price less than 500 are:")
print(reqd_stocks)

出力:

Stocks DataFrame:
         Stock Price             Sector
0        Tesla    835         Technology
1 Moderna Inc    112 Health Technology
2     Facebook    267         Technology
3       Boeing    209           Aircraft

The stocks of technology sector with price less than 500 are:
      Stock Price      Sector
2 Facebook    267 Technology