Bird
Raised Fist0
Data Analysis Pythondata~20 mins

Left and right joins in Data Analysis Python - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Join Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ data_output
intermediate
2:00remaining
Output of a left join on two DataFrames
Given two DataFrames df1 and df2, what is the output of the left join on column key?
Data Analysis Python
import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['B', 'C', 'D'], 'value2': [4, 5, 6]})

result = pd.merge(df1, df2, how='left', on='key')
print(result)
A
  key  value1  value2
0   A       1     NaN
1   B       2     4.0
2   C       3     5.0
B
  key  value1  value2
0   B       2     4.0
1   C       3     5.0
2   D     NaN     6.0
C
  key  value1  value2
0   A       1     4.0
1   B       2     5.0
2   C       3     6.0
D
  key  value1  value2
0   A       1     NaN
1   B       2     NaN
2   C       3     NaN
Attempts:
2 left
💡 Hint
Remember, a left join keeps all rows from the left DataFrame and matches rows from the right DataFrame where keys match.
❓ data_output
intermediate
2:00remaining
Output of a right join on two DataFrames
What is the output of the right join on column key for the given DataFrames?
Data Analysis Python
import pandas as pd

df1 = pd.DataFrame({'key': ['X', 'Y', 'Z'], 'value1': [7, 8, 9]})
df2 = pd.DataFrame({'key': ['Y', 'Z', 'W'], 'value2': [10, 11, 12]})

result = pd.merge(df1, df2, how='right', on='key')
print(result)
A
  key  value1  value2
0   X     7.0      NaN
1   Y     8.0      10
2   Z     9.0      11
B
  key  value1  value2
0   X     7.0      10
1   Y     8.0      11
2   Z     9.0      12
C
  key  value1  value2
0   Y     NaN      10
1   Z     NaN      11
2   W     NaN      12
D
  key  value1  value2
0   Y     8.0      10
1   Z     9.0      11
2   W     NaN      12
Attempts:
2 left
💡 Hint
Right join keeps all rows from the right DataFrame and matches from the left.
🧠 Conceptual
advanced
1:30remaining
Understanding join types in pandas
Which statement correctly describes the difference between a left join and a right join in pandas?
ALeft join keeps only matching rows; right join keeps all rows from both DataFrames.
BLeft join keeps all rows from the left DataFrame; right join keeps all rows from the right DataFrame.
CLeft join keeps all rows from the right DataFrame; right join keeps all rows from the left DataFrame.
DLeft join and right join both keep only matching rows from both DataFrames.
Attempts:
2 left
💡 Hint
Think about which DataFrame's rows are always kept in each join type.
🔧 Debug
advanced
1:30remaining
Identify the error in join code
What error will this code produce?
Data Analysis Python
import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B'], 'val1': [1, 2]})
df2 = pd.DataFrame({'key': ['B', 'C'], 'val2': [3, 4]})

result = pd.merge(df1, df2, how='left', on='keys')
print(result)
AKeyError: 'keys'
BTypeError: merge() got an unexpected keyword argument 'how'
CValueError: columns overlap but no suffix specified
DNo error; outputs merged DataFrame
Attempts:
2 left
💡 Hint
Check the column name used for joining.
🚀 Application
expert
2:30remaining
Combine two DataFrames with left and right joins to find unmatched rows
You have two DataFrames df1 and df2. How can you find rows in df1 that do not have matching keys in df2 using joins?
Data Analysis Python
import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'val1': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'C'], 'val2': [5, 6]})
APerform a full outer join and drop rows with NaN values.
BPerform a right join and filter rows where the left DataFrame columns are NaN.
CPerform a left join and filter rows where the right DataFrame columns are NaN.
DPerform an inner join and select rows with NaN values.
Attempts:
2 left
💡 Hint
Think about which join keeps all rows from df1 and how to identify unmatched rows.

Practice

(1/5)
1. What does a left join do when combining two tables in data analysis?
easy
A. Keeps all rows from both tables, matching or not.
B. Keeps all rows from the left table and adds matching rows from the right table.
C. Keeps only rows that match in both tables.
D. Keeps all rows from the right table and adds matching rows from the left table.

Solution

  1. Step 1: Understand the role of the left table in a left join

    A left join keeps every row from the left table regardless of matches in the right table.
  2. Step 2: Understand how matching rows from the right table are added

    Only rows from the right table that match the left table's keys are added; unmatched right rows are ignored.
  3. Final Answer:

    Keeps all rows from the left table and adds matching rows from the right table. -> Option B
  4. Quick Check:

    Left join = all left rows + matching right rows [OK]
Hint: Left join keeps all left rows, adds right matches [OK]
Common Mistakes:
  • Confusing left join with right join
  • Thinking left join keeps unmatched right rows
  • Believing left join only keeps matching rows
2. Which of the following is the correct syntax for a left join using pandas in Python?
easy
A. pd.merge(df1, df2, how='left', on='key')
B. pd.merge(df1, df2, how='right', on='key')
C. pd.join(df1, df2, how='left')
D. df1.left_join(df2, on='key')

Solution

  1. Step 1: Recall pandas merge syntax for joins

    In pandas, the function to join tables is pd.merge(), specifying the join type with the 'how' parameter.
  2. Step 2: Identify the correct parameters for a left join

    Using how='left' and on='key' correctly performs a left join on the specified key column.
  3. Final Answer:

    pd.merge(df1, df2, how='left', on='key') -> Option A
  4. Quick Check:

    pd.merge + how='left' = left join [OK]
Hint: Use pd.merge with how='left' for left join [OK]
Common Mistakes:
  • Using pd.join instead of pd.merge
  • Wrong 'how' parameter like 'right' or missing
  • Calling non-existent left_join method
3. Given these two DataFrames:
df1 = pd.DataFrame({'id': [1, 2, 3], 'value': ['A', 'B', 'C']})
df2 = pd.DataFrame({'id': [2, 3, 4], 'score': [90, 80, 70]})

What is the result of pd.merge(df1, df2, how='left', on='id')?
medium
A. [{'id':1,'value':'A','score':NaN},{'id':2,'value':'B','score':90},{'id':3,'value':'C','score':80}]
B. [{'id':2,'value':'B','score':90},{'id':3,'value':'C','score':80},{'id':4,'value':NaN,'score':70}]
C. [{'id':1,'value':'A','score':NaN},{'id':2,'value':'B','score':90},{'id':3,'value':'C','score':80},{'id':4,'value':NaN,'score':70}]
D. [{'id':1,'value':'A','score':NaN},{'id':2,'value':'B','score':NaN},{'id':3,'value':'C','score':NaN}]

Solution

  1. Step 1: Identify the left and right tables

    df1 is the left table with ids 1, 2, 3; df2 is the right table with ids 2, 3, 4.
  2. Step 2: Perform left join on 'id'

    All rows from df1 appear. For id=1, no match in df2, so score is NaN. For ids 2 and 3, scores 90 and 80 are added. id=4 from df2 is ignored.
  3. Final Answer:

    [{'id':1,'value':'A','score':NaN},{'id':2,'value':'B','score':90},{'id':3,'value':'C','score':80}] -> Option A
  4. Quick Check:

    Left join keeps all df1 rows + matching df2 rows [OK]
Hint: Left join keeps all left rows, unmatched right rows ignored [OK]
Common Mistakes:
  • Including unmatched right rows in output
  • Replacing unmatched left values with NaN incorrectly
  • Confusing left and right join results
4. You run this code but get an error:
pd.merge(df1, df2, how='right', key='id')

What is the error and how to fix it?
medium
A. Error: DataFrames must have same columns. Fix by renaming columns.
B. Error: 'how' must be 'left' or 'inner'. Fix by changing 'right' to 'left'.
C. Error: 'key' is not a valid argument. Fix by using 'on='id'' instead.
D. No error, code runs fine.

Solution

  1. Step 1: Identify the incorrect parameter name

    The parameter to specify join keys in pd.merge is 'on', not 'key'.
  2. Step 2: Correct the parameter name

    Replace 'key='id'' with 'on='id'' to fix the error.
  3. Final Answer:

    Error: 'key' is not a valid argument. Fix by using 'on='id'' instead. -> Option C
  4. Quick Check:

    Use 'on' for join keys in pd.merge [OK]
Hint: Use 'on' not 'key' for join columns in pd.merge [OK]
Common Mistakes:
  • Using 'key' instead of 'on' parameter
  • Changing 'how' incorrectly
  • Assuming no error occurs
5. You have two DataFrames:
df_customers = pd.DataFrame({'customer_id': [1, 2, 3], 'name': ['Ann', 'Bob', 'Cara']})
df_orders = pd.DataFrame({'order_id': [101, 102], 'customer_id': [2, 4], 'amount': [250, 300]})

You want to list all orders with customer names, including orders without matching customers. Which join should you use and why?
hard
A. Full outer join to keep all customers and all orders.
B. Left join on 'customer_id' to keep all customers and add matching orders.
C. Inner join on 'customer_id' to keep only matching customers and orders.
D. Right join on 'customer_id' to keep all orders and add matching customer names.

Solution

  1. Step 1: Identify which table to keep all rows from

    You want all orders listed, even if no matching customer exists, so keep all rows from df_orders.
  2. Step 2: Choose join type to keep all right table rows

    df_orders is the right table in the join. Using a right join keeps all rows from df_orders and adds matching customer names from df_customers.
  3. Final Answer:

    Right join on 'customer_id' to keep all orders and add matching customer names. -> Option D
  4. Quick Check:

    Right join keeps all right table rows [OK]
Hint: Use right join to keep all orders, add matching customers [OK]
Common Mistakes:
  • Using left join keeps all customers, not all orders
  • Using inner join drops unmatched orders
  • Using full join adds unmatched customers unnecessarily
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