Bird
Raised Fist0
Pandasdata~20 mins

Inner join behavior in Pandas - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Inner Join Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate
2:00remaining
What is the output of this inner join?

Given two dataframes df1 and df2, what is the result of the inner join on column key?

Pandas
import pandas as pd

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

result = pd.merge(df1, df2, on='key', how='inner')
print(result)
A[{'key': 'A', 'val1': 1, 'val2': 4}, {'key': 'B', 'val1': 2, 'val2': 5}]
B[{'key': 'B', 'val1': 2, 'val2': 4}, {'key': 'C', 'val1': 3, 'val2': 5}]
C[{'key': 'A', 'val1': 1, 'val2': 6}, {'key': 'D', 'val1': 3, 'val2': 6}]
D[{'key': 'A', 'val1': 1, 'val2': null}, {'key': 'B', 'val1': 2, 'val2': 4}, {'key': 'C', 'val1': 3, 'val2': 5}, {'key': 'D', 'val1': null, 'val2': 6}]
Attempts:
2 left
💡 Hint

Inner join returns only rows with matching keys in both dataframes.

🧠 Conceptual
intermediate
1:30remaining
Which statement best describes an inner join?

Choose the correct description of an inner join operation between two tables or dataframes.

AReturns only rows where keys exist in both tables, excluding all others.
BReturns all rows from the left table and matching rows from the right table, filling with nulls if no match.
CReturns all rows from the right table and matching rows from the left table, filling with nulls if no match.
DReturns all rows from both tables, combining matching rows and filling nulls where no match exists.
Attempts:
2 left
💡 Hint

Think about which rows appear in the result when keys do not match.

📝 Syntax
advanced
1:30remaining
Identify the correct syntax for an inner join in pandas

Which of the following code snippets correctly performs an inner join on column id between df_left and df_right?

Adf_left.merge(df_right, on='id', join='inner')
Bdf_left.join(df_right, on='id', how='inner')
Cpd.join(df_left, df_right, on='id', how='inner')
Dpd.merge(df_left, df_right, on='id', how='inner')
Attempts:
2 left
💡 Hint

Recall the correct function and parameter names for pandas merge.

❓ optimization
advanced
2:00remaining
Optimizing inner join performance on large dataframes

You have two large dataframes with millions of rows each. Which approach can improve the performance of an inner join on column user_id?

AEnsure both dataframes have <code>user_id</code> as an index before merging.
BConvert <code>user_id</code> columns to string type before merging.
CDrop duplicates from both dataframes before merging regardless of keys.
DUse <code>how='outer'</code> instead of <code>how='inner'</code> to reduce computation.
Attempts:
2 left
💡 Hint

Indexes can speed up join operations.

🔧 Debug
expert
2:30remaining
Why does this inner join produce an empty dataframe?

Given the code below, why is the result of the inner join empty?

Pandas
import pandas as pd

df1 = pd.DataFrame({'key': ['a', 'b', 'c'], 'val': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B', 'C'], 'val': [4, 5, 6]})

result = pd.merge(df1, df2, on='key', how='inner')
print(result)
AThe merge function requires specifying suffixes for overlapping columns.
BThe 'val' columns have different names causing the join to fail.
CThe keys differ in case sensitivity; 'a' != 'A', so no matches occur.
DThe 'how' parameter should be 'left' instead of 'inner' to get results.
Attempts:
2 left
💡 Hint

Check if the keys match exactly including letter case.

Practice

(1/5)
1. What does an inner join do when merging two pandas DataFrames?
easy
A. Keeps only rows with matching keys in both DataFrames
B. Keeps all rows from the left DataFrame and fills missing with NaN
C. Keeps all rows from the right DataFrame and fills missing with NaN
D. Keeps all rows from both DataFrames, filling missing with NaN

Solution

  1. Step 1: Understand join types in pandas

    Inner join keeps only rows where the key exists in both DataFrames.
  2. Step 2: Compare with other join types

    Left join keeps all left rows, right join keeps all right rows, outer join keeps all rows from both.
  3. Final Answer:

    Keeps only rows with matching keys in both DataFrames -> Option A
  4. Quick Check:

    Inner join = matching keys only [OK]
Hint: Inner join keeps only common keys in both tables [OK]
Common Mistakes:
  • Confusing inner join with left or outer join
  • Thinking inner join keeps all rows
  • Assuming inner join fills missing with NaN
2. Which of the following is the correct syntax to perform an inner join on DataFrames df1 and df2 using the column 'id'?
easy
A. pd.merge(df1, df2, on='id', how='inner')
B. pd.merge(df1, df2, on='id', how='outer')
C. df1.join(df2, on='id')
D. df1.merge(df2, left_on='id', right_on='id', how='left')

Solution

  1. Step 1: Identify correct function and parameters

    Use pd.merge() with on='id' and how='inner' for inner join.
  2. Step 2: Check other options for errors

    df1.join(df2, on='id') defaults to left join, pd.merge(df1, df2, on='id', how='outer') uses outer join, df1.merge(df2, left_on='id', right_on='id', how='left') uses left join.
  3. Final Answer:

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

    pd.merge + how='inner' + on='id' = correct syntax [OK]
Hint: Use pd.merge with how='inner' and on='column' [OK]
Common Mistakes:
  • Using wrong join type like 'outer' or 'left'
  • Using df.join() without specifying correct parameters
  • Mixing left_on and right_on incorrectly
3. Given the following DataFrames:
df1 = pd.DataFrame({'id': [1, 2, 3], 'val1': ['A', 'B', 'C']})
df2 = pd.DataFrame({'id': [2, 3, 4], 'val2': ['X', 'Y', 'Z']})
result = pd.merge(df1, df2, on='id', how='inner')

What is the content of result?
medium
A. {'id': [2, 3, 4], 'val1': ['B', 'C', 'NaN'], 'val2': ['X', 'Y', 'Z']}
B. {'id': [1, 2, 3], 'val1': ['A', 'B', 'C'], 'val2': ['NaN', 'X', 'Y']}
C. {'id': [2, 3], 'val1': ['B', 'C'], 'val2': ['X', 'Y']}
D. {'id': [1, 2, 3, 4], 'val1': ['A', 'B', 'C', 'NaN'], 'val2': ['NaN', 'X', 'Y', 'Z']}

Solution

  1. Step 1: Identify matching keys for inner join

    Inner join keeps rows where 'id' is in both df1 and df2: ids 2 and 3.
  2. Step 2: Combine matching rows

    Rows with id 2 and 3 are merged with their respective val1 and val2 values.
  3. Final Answer:

    {'id': [2, 3], 'val1': ['B', 'C'], 'val2': ['X', 'Y']} -> Option C
  4. Quick Check:

    Inner join = only common ids 2 and 3 [OK]
Hint: Inner join keeps only keys present in both DataFrames [OK]
Common Mistakes:
  • Including rows with id 1 or 4 which are not common
  • Confusing inner join with outer join results
  • Expecting NaN values in inner join output
4. You run this code:
df1 = pd.DataFrame({'key': [1, 2], 'val': ['A', 'B']})
df2 = pd.DataFrame({'key': [2, 3], 'val': ['X', 'Y']})
result = pd.merge(df1, df2, on='key', how='inner')

But you get an error: ValueError: columns overlap but no suffix specified. What is the fix?
medium
A. Remove the 'on' parameter from pd.merge()
B. Change how='inner' to how='outer'
C. Rename columns before merge to avoid overlap
D. Add suffixes parameter like suffixes=('_left', '_right') in pd.merge()

Solution

  1. Step 1: Understand cause of error

    Both DataFrames have a 'val' column causing overlap without suffixes.
  2. Step 2: Apply fix by adding suffixes

    Use suffixes=('_left', '_right') in pd.merge() to differentiate overlapping columns.
  3. Final Answer:

    Add suffixes parameter like suffixes=('_left', '_right') in pd.merge() -> Option D
  4. Quick Check:

    Overlapping columns need suffixes to avoid error [OK]
Hint: Add suffixes to handle overlapping columns in merge [OK]
Common Mistakes:
  • Changing join type does not fix column overlap
  • Removing 'on' causes wrong join keys
  • Ignoring need for suffixes with overlapping columns
5. You have two DataFrames:
df1 = pd.DataFrame({'id': [1, 2, 2, 3], 'score': [10, 20, 30, 40]})
df2 = pd.DataFrame({'id': [2, 2, 3], 'grade': ['A', 'B', 'C']})
result = pd.merge(df1, df2, on='id', how='inner')

How many rows will result have after the inner join?
hard
A. 4
B. 5
C. 6
D. 7

Solution

  1. Step 1: Identify matching keys and duplicates

    Keys 2 and 3 are common. df1 has two rows with id=2, df2 has two rows with id=2.
  2. Step 2: Calculate Cartesian product for duplicates

    For id=2: 2 rows in df1 x 2 rows in df2 = 4 rows; for id=3: 1 row x 1 row = 1 row; total = 5 rows.
  3. Step 3: Count total rows

    Total rows = 4 (id=2) + 1 (id=3) = 5 rows.
  4. Final Answer:

    5 -> Option B
  5. Quick Check:

    Duplicates multiply rows in inner join [OK]
Hint: Duplicates multiply rows in inner join result [OK]
Common Mistakes:
  • Counting unique keys instead of row combinations
  • Ignoring duplicate rows in join keys
  • Assuming row count equals unique keys count
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