Boolean indexing in Data Analysis Python - Time & Space Complexity
We want to understand how the time to filter data using Boolean indexing changes as the data size grows.
How does the filtering time increase when we have more data rows?
Analyze the time complexity of the following code snippet.
import pandas as pd
data = pd.DataFrame({
'age': [23, 45, 12, 36, 52],
'score': [88, 92, 79, 94, 67]
})
filtered = data[data['age'] > 30]
This code filters rows where the 'age' column is greater than 30.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Checking each row's 'age' value against 30.
- How many times: Once for every row in the data.
As the number of rows grows, the filtering checks grow at the same rate.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 checks |
| 100 | 100 checks |
| 1000 | 1000 checks |
Pattern observation: The number of operations grows directly with the number of rows.
Time Complexity: O(n)
This means the time to filter grows in direct proportion to the number of rows in the data.
[X] Wrong: "Filtering with Boolean indexing is instant no matter how big the data is."
[OK] Correct: Each row must be checked, so more rows mean more work and more time.
Understanding how filtering scales helps you explain data processing speed and efficiency clearly in real projects.
"What if we filter using multiple conditions combined with &? How would the time complexity change?"
Practice
Boolean indexing do in data analysis?Solution
Step 1: Understand the purpose of Boolean indexing
Boolean indexing uses true/false values to filter data.Step 2: Compare with other options
Sorting, converting types, and merging are different operations.Final Answer:
Selects data based on true or false conditions -> Option AQuick Check:
Boolean indexing = filter by true/false [OK]
- Confusing Boolean indexing with sorting
- Thinking it changes data types
- Mixing it up with merging datasets
'age' is greater than 30 in a DataFrame df?Solution
Step 1: Identify correct Boolean indexing syntax
Use df[condition], where condition is df['age'] > 30.Step 2: Check other options for errors
df['age' > 30] has wrong brackets, C uses assignment (=) instead of comparison, D uses wrong comparison sign.Final Answer:
df[df['age'] > 30] -> Option CQuick Check:
Correct syntax uses df[condition] with comparison [OK]
- Using assignment '=' instead of comparison '>'
- Wrong bracket placement
- Using incorrect comparison signs
df below:import pandas as pd
data = {'score': [85, 42, 78, 90, 55]}
df = pd.DataFrame(data)What is the output of
df[df['score'] >= 78]?Solution
Step 1: Apply the condition df['score'] >= 78
This selects rows where score is 78 or more: 85, 78, 90.Step 2: Check which rows match
Rows with scores 42 and 55 do not match, so they are excluded.Final Answer:
Rows with scores 85, 78, and 90 -> Option AQuick Check:
Filter keeps scores >= 78 [OK]
- Including rows that don't meet the condition
- Thinking condition is ignored
- Expecting empty output incorrectly
import pandas as pd
data = {'value': [10, 20, 30, 40]}
df = pd.DataFrame(data)
filtered = df[df.value > 25]Solution
Step 1: Check attribute access for column 'value'
Using df.value is valid if column name has no spaces or special chars.Step 2: Verify filtering condition
df.value > 25 selects rows with values 30 and 40 correctly.Final Answer:
It works correctly and filters rows with value > 25 -> Option DQuick Check:
Attribute access works for simple column names [OK]
- Assuming df.value always causes error
- Expecting syntax error
- Thinking it returns empty DataFrame
df with a column 'status' containing values 'pass', 'fail', and 'pending'. How do you select only rows where 'status' is either 'pass' or 'pending' using Boolean indexing?Solution
Step 1: Use element-wise OR for multiple conditions
Use | between conditions inside parentheses for correct Boolean indexing.Step 2: Avoid Python keywords and wrong syntax
'and' and 'or' do not work element-wise; 'in' is not vectorized here.Final Answer:
df[(df['status'] == 'pass') | (df['status'] == 'pending')] -> Option BQuick Check:
Use | with parentheses for multiple conditions [OK]
- Using 'and' or 'or' instead of | and &
- Trying to use 'in' directly on Series
- Missing parentheses around conditions
Ready to prove it?
Pass the test and this pattern moves unknown
