Bird
Raised Fist0
Pandasdata~5 mins

Multiple conditions with & and | in Pandas

Choose your learning style10 modes available
Introduction

We use multiple conditions to filter data based on more than one rule at the same time. This helps us find exactly the rows we want.

You want to find people who are older than 30 and live in a specific city.
You want to select products that are either on sale or have a high rating.
You want to filter data where temperature is above 20 degrees and humidity is below 50%.
You want to get rows where a score is less than 50 or the status is 'failed'.
Syntax
Pandas
df[(condition1) & (condition2)]  # for AND

df[(condition1) | (condition2)]  # for OR

Use parentheses around each condition to avoid errors.

Use & for AND, and | for OR between conditions.

Examples
Select rows where age is more than 30 AND city is New York.
Pandas
df[(df['age'] > 30) & (df['city'] == 'New York')]
Select rows where price is less than 100 OR rating is more than 4.
Pandas
df[(df['price'] < 100) | (df['rating'] > 4)]
Select rows where temperature is above 20 AND humidity is below 50.
Pandas
df[(df['temperature'] > 20) & (df['humidity'] < 50)]
Sample Program

This code creates a small table of people with their age, city, and score. Then it shows how to filter rows using AND and OR conditions.

Pandas
import pandas as pd

# Create sample data
data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
    'age': [25, 35, 30, 40, 22],
    'city': ['New York', 'Los Angeles', 'New York', 'Chicago', 'Los Angeles'],
    'score': [85, 90, 70, 60, 95]
}

df = pd.DataFrame(data)

# Filter: age > 30 AND city is Los Angeles
filtered_and = df[(df['age'] > 30) & (df['city'] == 'Los Angeles')]

# Filter: score < 70 OR city is Chicago
filtered_or = df[(df['score'] < 70) | (df['city'] == 'Chicago')]

print('Rows with age > 30 AND city = Los Angeles:')
print(filtered_and)
print('\nRows with score < 70 OR city = Chicago:')
print(filtered_or)
OutputSuccess
Important Notes

Always put each condition inside parentheses when combining with & or |.

Use & for AND, | for OR, not the words 'and' or 'or'.

Make sure your DataFrame columns exist to avoid errors.

Summary

Use & to combine conditions that must all be true (AND).

Use | to combine conditions where any can be true (OR).

Always wrap each condition in parentheses to avoid mistakes.

Practice

(1/5)
1. Which operator should you use in pandas to select rows where age is greater than 30 and salary is above 50000?
easy
A. Use and to combine the two conditions without parentheses.
B. Use | to combine the two conditions without parentheses.
C. Use & to combine the two conditions with parentheses around each.
D. Use or to combine the two conditions with parentheses.

Solution

  1. Step 1: Understand the condition type

    We want rows where both conditions are true, so this is an AND condition.
  2. Step 2: Choose the correct pandas operator

    In pandas, & is used for AND between conditions, and each condition must be in parentheses.
  3. Final Answer:

    Use & to combine the two conditions with parentheses around each. -> Option C
  4. Quick Check:

    AND condition = & with parentheses [OK]
Hint: Use & with parentheses for AND conditions in pandas [OK]
Common Mistakes:
  • Using 'and' instead of & causes errors.
  • Not wrapping each condition in parentheses.
  • Using | instead of & for AND conditions.
2. Which of the following is the correct syntax to filter a DataFrame df for rows where df['A'] > 10 or df['B'] < 5?
easy
A. df[(df['A'] > 10) | (df['B'] < 5)]
B. df[(df['A'] > 10) & (df['B'] < 5)]
C. df[df['A'] > 10 | df['B'] < 5]
D. df[df['A'] > 10 or df['B'] < 5]

Solution

  1. Step 1: Identify the condition type

    The question asks for rows where either condition is true, so this is an OR condition.
  2. Step 2: Use correct pandas syntax for OR

    In pandas, | is used for OR, and each condition must be wrapped in parentheses inside the DataFrame filter.
  3. Final Answer:

    df[(df['A'] > 10) | (df['B'] < 5)] -> Option A
  4. Quick Check:

    OR condition = | with parentheses [OK]
Hint: Use | with parentheses for OR conditions in pandas [OK]
Common Mistakes:
  • Using & instead of | for OR conditions.
  • Not wrapping conditions in parentheses.
  • Using Python 'or' instead of | causes errors.
3. Given the DataFrame df below:
import pandas as pd
df = pd.DataFrame({'age': [25, 40, 35, 28], 'salary': [40000, 60000, 50000, 45000]})
filtered = df[(df['age'] > 30) & (df['salary'] >= 50000)]
print(filtered)

What will be the output?
medium
A. Rows with age > 30 or salary >= 50000: rows 1, 2, and 3
B. Rows with age > 30 and salary >= 50000: rows 1 and 2
C. Rows with age > 30 and salary >= 50000: row 1 only
D. Empty DataFrame

Solution

  1. Step 1: Check each row against conditions

    Row 0: age=25 (no), salary=40000 (no)
    Row 1: age=40 (yes), salary=60000 (yes)
    Row 2: age=35 (yes), salary=50000 (yes)
    Row 3: age=28 (no), salary=45000 (no)
  2. Step 2: Select rows where both conditions are true

    Rows 1 and 2 satisfy both conditions.
  3. Final Answer:

    Rows with age > 30 and salary >= 50000: rows 1 and 2 -> Option B
  4. Quick Check:

    Both conditions true for rows 1 and 2 [OK]
Hint: Check each condition row-wise, then combine with & [OK]
Common Mistakes:
  • Confusing & with | and selecting wrong rows.
  • Ignoring parentheses causing syntax errors.
  • Misreading >= as > or vice versa.
4. What is wrong with this pandas filter code?
df[(df['score'] > 80) & df['age'] < 30]

Choose the best fix.
medium
A. Use 'and' instead of &.
B. Replace & with | to fix the syntax.
C. Remove parentheses around the first condition.
D. Add parentheses around the second condition: df[(df['score'] > 80) & (df['age'] < 30)]

Solution

  1. Step 1: Identify the syntax error

    The second condition df['age'] < 30 is not wrapped in parentheses, which is required when using &.
  2. Step 2: Correct the syntax by adding parentheses

    Wrap the second condition in parentheses to fix the error: df[(df['score'] > 80) & (df['age'] < 30)]
  3. Final Answer:

    Add parentheses around the second condition: df[(df['score'] > 80) & (df['age'] < 30)] -> Option D
  4. Quick Check:

    Each condition must be in parentheses with & [OK]
Hint: Wrap each condition in parentheses when using & or | [OK]
Common Mistakes:
  • Not using parentheses around all conditions.
  • Using 'and' instead of &.
  • Changing & to | without reason.
5. You have a DataFrame df with columns temperature and humidity. You want to select rows where temperature is between 20 and 30 inclusive, or humidity is below 40. Which of the following code snippets correctly applies these conditions?
hard
A. df[((df['temperature'] >= 20) & (df['temperature'] <= 30)) | (df['humidity'] < 40)]
B. df[(df['temperature'] >= 20) & df['temperature'] <= 30 | (df['humidity'] < 40)]
C. df[(df['temperature'] >= 20) | (df['temperature'] <= 30) & (df['humidity'] < 40)]
D. df[(df['temperature'] >= 20) & (df['humidity'] < 40) | (df['temperature'] <= 30)]

Solution

  1. Step 1: Understand the condition logic

    We want rows where temperature is between 20 and 30 (both conditions combined with AND), OR humidity is below 40.
  2. Step 2: Apply correct operator precedence with parentheses

    Use parentheses to group the temperature range conditions with & and then combine with | for humidity condition.
  3. Final Answer:

    df[((df['temperature'] >= 20) & (df['temperature'] <= 30)) | (df['humidity'] < 40)] -> Option A
  4. Quick Check:

    Group AND conditions, then OR with other condition [OK]
Hint: Group AND conditions in parentheses before OR [OK]
Common Mistakes:
  • Missing parentheses causing wrong logic.
  • Mixing & and | without grouping.
  • Using | inside AND group incorrectly.
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard