To filter on more than one condition, combine masks with & (and), | (or) and ~ (not), and put each condition in its own parentheses:
df[(df["region"] == "North") & (df["channel"] == "Online")]
Two mistakes catch almost everyone. Python's and and or don't work on columns; they raise The truth value of a Series is ambiguous. And without the parentheses, & runs before ==, which gives the same error or a confusing one.
For several allowed values, isin is shorter than a chain of |:
df[df["category"].isin(["Lighting", "Decor"])]
~ flips a mask, so ~df["category"].isin([...]) means "not in the list". For a range, df["revenue"].between(100, 250) includes both ends.
df.query('region == "North" and channel == "Online"') is another way to write it. Inside query, plain and and or are fine.