Merging on different column names in Pandas - Mini Project: Build & Apply
df_products with these exact columns and values:product_id: [101, 102, 103]product_name: ['Pen', 'Notebook', 'Eraser']Use pd.DataFrame with a dictionary where keys are column names and values are lists of data.
df_prices with these exact columns and values:code: [101, 102, 103]price: [1.5, 2.0, 0.5]Use pd.DataFrame with a dictionary for the second table, matching the exact column names and values.
pd.merge to merge df_products and df_prices where df_products.product_id matches df_prices.code. Save the result in a variable called df_merged.Use pd.merge with left_on and right_on parameters to join on columns with different names.
df_merged DataFrame to show the combined product names and prices.Use print(df_merged) to show the combined table.
Practice
What does the left_on and right_on parameters do in pandas.merge()?
Solution
Step 1: Understand merge parameters
Theleft_onandright_onparameters specify which columns to join on when the column names differ between DataFrames.Step 2: Clarify their purpose
They do not rename or filter data but tell pandas which columns to match for merging.Final Answer:
They specify columns with different names to join on from left and right DataFrames. -> Option AQuick Check:
left_on/right_on = specify join columns [OK]
- Thinking they rename columns
- Confusing with filtering rows
- Assuming they sort data
Which of the following is the correct syntax to merge df1 and df2 on columns 'id' in df1 and 'user_id' in df2?
df1 = pd.DataFrame({'id': [1, 2], 'val': ['A', 'B']})
df2 = pd.DataFrame({'user_id': [1, 3], 'score': [10, 20]})Solution
Step 1: Identify correct parameters
Since columns have different names, useleft_on='id'andright_on='user_id'to specify join keys.Step 2: Check syntax correctness
pd.merge(df1, df2, left_on='id', right_on='user_id') correctly usespd.merge(df1, df2, left_on='id', right_on='user_id'). Others misuseonor swap keys.Final Answer:
pd.merge(df1, df2, left_on='id', right_on='user_id') -> Option CQuick Check:
left_on='id', right_on='user_id' = correct syntax [OK]
- Using on with different column names
- Swapping left_on and right_on
- Passing both columns in on as a list
What is the output of the following code?
import pandas as pd
df1 = pd.DataFrame({'key1': ['A', 'B', 'C'], 'val1': [1, 2, 3]})
df2 = pd.DataFrame({'key2': ['B', 'C', 'D'], 'val2': [4, 5, 6]})
result = pd.merge(df1, df2, left_on='key1', right_on='key2', how='inner')
print(result)Solution
Step 1: Understand merge keys and type
We merge onkey1fromdf1andkey2fromdf2withhow='inner', so only matching keys appear.Step 2: Find matching keys
Matching keys are 'B' and 'C'. Rows with 'A' and 'D' are excluded.Final Answer:
key1 val1 key2 val2 0 B 2 B 4 1 C 3 C 5 -> Option DQuick Check:
Inner join on matching keys = rows with B and C [OK]
- Expecting all rows to appear
- Mixing up left_on and right_on
- Confusing inner with outer join
What is wrong with this code snippet?
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'X': [1, 3], 'Y': [5, 6]})
merged = pd.merge(df1, df2, left_on='A', right_on='B')
print(merged)Solution
Step 1: Check columns in each DataFrame
df1has columns 'A' and 'B'.df2has columns 'X' and 'Y'. The code tries to merge onleft_on='A'andright_on='B'.Step 2: Identify error cause
Sincedf2does not have column 'B', pandas will raise aKeyError.Final Answer:
It will raise a KeyError because 'B' is not in df2. -> Option AQuick Check:
right_on column must exist in right DataFrame [OK]
- Assuming columns exist in both DataFrames
- Confusing left_on and right_on columns
- Ignoring error messages
You have two DataFrames:
df_customers = pd.DataFrame({'cust_id': [101, 102, 103], 'name': ['Alice', 'Bob', 'Charlie']})
df_orders = pd.DataFrame({'customer': [102, 101, 104], 'order_id': [5001, 5002, 5003]})You want to merge these to get customer names with their orders, including customers without orders and orders without customers. Which code correctly does this?
Solution
Step 1: Identify columns to join on
Customer IDs arecust_idindf_customersandcustomerindf_orders. So useleft_on='cust_id'andright_on='customer'.Step 2: Choose join type for all data
To include all customers and all orders (even unmatched), usehow='outer'for full outer join.Final Answer:
pd.merge(df_customers, df_orders, left_on='cust_id', right_on='customer', how='outer') -> Option BQuick Check:
Outer join + left_on/right_on = all data combined [OK]
- Using inner join loses unmatched rows
- Merging on wrong columns
- Using name column instead of ID
Ready to prove it?
Pass the test and this pattern moves unknown
