複数条件
このレッスンでできるようになること。2つ以上の条件を組み合わせて行を絞れるようになります。
「渋谷店の、食器カテゴリの売上だけ」のように、条件が2つ以上になる場面はすぐに来ます。pandas では次の3つの記号で組み合わせます。
&は両方に当てはまる行を残します。and にあたります|はどちらかに当てはまる行を残します。or にあたります~は条件を反転します。not にあたります
Python
import pandas as pd
df = pd.read_csv("sales.csv")
target = df[(df["店舗"] == "渋谷店") & (df["カテゴリ"] == "食器")]ここで必ず守る決まりが2つあります。1つ目は、それぞれの条件を丸かっこで囲むことです。囲まないと & のほうが == より先に計算されてしまい、意味不明なエラーになります。この間違いは pandas を使う人がほぼ全員1度は踏みます。2つ目は、Python の and と or を使わないことです。and は1つの真偽値を求める記号なので、True と False が何行も並んだ Series を渡すと「真偽値があいまいです」というエラーになります。記号のほうを使ってください。
条件が3つ以上でも同じです。(A) & (B) & (C) のようにつなげます。読みにくくなってきたら、条件に名前を付けて分けるのが安全です。
Python
is_shibuya = df["店舗"] == "渋谷店"
is_tableware = df["カテゴリ"] == "食器"
target = df[is_shibuya & is_tableware]範囲で絞るときも同じ形になります。「3000円以上7000円未満」なら (df["金額"] >= 3000) & (df["金額"] < 7000) です。pandas には between という書き方もありますが、こちらは両端を含むので、意図と合うか確かめてから使ってください。この演習では、かつ と または の両方を書きます。
要件
- 渋谷店かつ調理器具の行を & で絞る
- その件数を and_count、金額の合計を and_total に int で入れる
- 食器または収納の行を | で絞り、件数を or_count に int で入れる
- それぞれの条件は丸かっこで囲む
入出力例
filter_multi("売上日,店舗,商品名,カテゴリ,数量,金額
2026-01-05,渋谷店,白磁のマグカップ,食器,2,3600
2026-01-06,横浜店,鉄のフライパン,調理器具,1,7800
2026-01-07,大宮店,積み重ね収納ボックス,収納,3,4500
2026-01-08,渋谷店,木製カッティングボード,調理器具,1,4200
2026-01-09,横浜店,白磁のマグカップ,食器,4,7200
2026-02-03,渋谷店,鋳物ホーロー鍋,調理器具,1,16800
2026-02-04,大宮店,白磁のマグカップ,食器,5,9000
2026-02-05,渋谷店,布製収納バスケット,収納,2,3000
") → {"and_count":2,"and_total":21000,"or_count":5}
filter_multi("売上日,店舗,商品名,カテゴリ,数量,金額
2026-01-05,渋谷店,白磁のマグカップ,食器,2,3600
2026-01-06,横浜店,鉄のフライパン,調理器具,1,7800
2026-01-07,大宮店,積み重ね収納ボックス,収納,3,4500
2026-01-08,渋谷店,木製カッティングボード,調理器具,1,4200
") → {"and_count":1,"and_total":4200,"or_count":2}ヒント
編集 ゆめさく編集部