Bird
Raised Fist0
Data Analysis Pythondata~10 mins

concat() for stacking DataFrames in Data Analysis Python - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - concat() for stacking DataFrames
Start with DataFrames
↓
Choose axis: 0 for rows, 1 for columns
↓
Call pd.concat() with list of DataFrames
↓
Combine DataFrames along chosen axis
↓
Return new stacked DataFrame
We start with two or more DataFrames, choose how to stack them (rows or columns), then use concat() to combine them into one DataFrame.
Execution Sample
Data Analysis Python
import pandas as pd

df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})

result = pd.concat([df1, df2], axis=0)
This code stacks two DataFrames vertically (row-wise) using concat.
Execution Table
StepActionDataFrames InvolvedAxisResulting DataFrame ShapeResult Preview
1Create df1df1-(2, 2)[[1,3],[2,4]]
2Create df2df2-(2, 2)[[5,7],[6,8]]
3Call pd.concat([df1, df2], axis=0)df1, df20 (rows)(4, 2)[[1,3],[2,4],[5,7],[6,8]]
4Check index after concatdf1, df20 (rows)(4, 2)Index: [0,1,0,1] (duplicate indices)
5Call pd.concat([df1, df2], axis=0, ignore_index=True)df1, df20 (rows)(4, 2)Index reset to [0,1,2,3]
💡 All DataFrames stacked row-wise; final DataFrame has 4 rows and 2 columns.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 5
df1NoneA: [1,2], B: [3,4]A: [1,2], B: [3,4]A: [1,2], B: [3,4]A: [1,2], B: [3,4]
df2NoneNoneA: [5,6], B: [7,8]A: [5,6], B: [7,8]A: [5,6], B: [7,8]
resultNoneNoneNoneA: [1,2,5,6], B: [3,4,7,8], index: [0,1,0,1]A: [1,2,5,6], B: [3,4,7,8], index: [0,1,2,3]
Key Moments - 3 Insights
Why do the indices repeat after stacking without ignore_index?
Because concat keeps original indices by default, so rows from df2 keep their original index values, causing duplicates as shown in step 4 of execution_table.
What does axis=0 mean in concat()?
Axis=0 means stacking DataFrames vertically, adding rows one below another, as shown in step 3 where rows increase from 2 to 4.
How does ignore_index=True affect the result?
It resets the index to a new continuous range starting at 0, avoiding duplicate indices, as shown in step 5.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 3, what is the shape of the resulting DataFrame?
A(2, 4)
B(2, 2)
C(4, 2)
D(3, 2)
💡 Hint
Check the 'Resulting DataFrame Shape' column at step 3 in execution_table.
At which step does the index get reset to avoid duplicates?
AStep 5
BStep 4
CStep 3
DStep 2
💡 Hint
Look at the 'Action' and 'Result Preview' columns in execution_table for index changes.
If axis=1 was used instead of axis=0, how would the shape change after concat?
ARows would double, columns stay same
BColumns would double, rows stay same
CShape stays the same
DDataFrames cannot be concatenated on axis=1
💡 Hint
Recall axis=1 means stacking side-by-side, increasing columns, not rows.
Concept Snapshot
pd.concat([df1, df2], axis=0) stacks DataFrames vertically (rows).
axis=1 stacks horizontally (columns).
By default, indices are kept, causing duplicates.
Use ignore_index=True to reset indices.
Result is a new combined DataFrame.
Full Transcript
We start with two DataFrames, df1 and df2, each with 2 rows and 2 columns. Using pd.concat with axis=0 stacks them vertically, resulting in a DataFrame with 4 rows and 2 columns. By default, the original row indices are kept, so indices repeat. To avoid this, ignore_index=True resets the index to a continuous range. This process creates a new DataFrame combining the data from both inputs.

Practice

(1/5)
1. What does the concat() function do when stacking DataFrames with axis=0?
easy
A. It sorts the DataFrames before stacking.
B. It stacks DataFrames horizontally by adding columns.
C. It stacks DataFrames vertically by adding rows.
D. It merges DataFrames based on matching column values.

Solution

  1. Step 1: Understand axis parameter in concat()

    The axis=0 means stacking along rows, so new rows are added below existing ones.
  2. Step 2: Differentiate vertical vs horizontal stacking

    Vertical stacking adds rows; horizontal stacking (axis=1) adds columns side by side.
  3. Final Answer:

    It stacks DataFrames vertically by adding rows. -> Option C
  4. Quick Check:

    axis=0 means vertical stacking [OK]
Hint: axis=0 adds rows, axis=1 adds columns [OK]
Common Mistakes:
  • Confusing axis=0 with horizontal stacking
  • Thinking concat merges like join
  • Assuming concat sorts data automatically
2. Which of the following is the correct syntax to stack two DataFrames df1 and df2 vertically and reset the index?
easy
A. pd.concat([df1, df2], axis=1, ignore_index=True)
B. pd.concat([df1, df2], axis=0, ignore_index=True)
C. pd.concat(df1, df2, axis=0, ignore_index=True)
D. pd.concat([df1, df2], axis=0)

Solution

  1. Step 1: Check the concat() function syntax

    Correct syntax requires a list of DataFrames as first argument, e.g., [df1, df2].
  2. Step 2: Confirm axis and ignore_index usage

    To stack vertically and reset index, use axis=0 and ignore_index=True.
  3. Final Answer:

    pd.concat([df1, df2], axis=0, ignore_index=True) -> Option B
  4. Quick Check:

    List + axis=0 + ignore_index=True = correct syntax [OK]
Hint: Use list of DataFrames and axis=0 for vertical concat [OK]
Common Mistakes:
  • Passing DataFrames without list brackets
  • Using axis=1 for vertical stacking
  • Forgetting ignore_index to reset row numbers
3. Given these DataFrames:
import pandas as pd
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5], 'B': [6]})
result = pd.concat([df1, df2], axis=0, ignore_index=True)
print(result)

What is the output?
medium
A. A B 0 1 3 1 2 4 2 5 6
B. A B 0 1 3 1 2 4 0 5 6
C. A B 0 1 3 1 2 4
D. Error due to missing axis parameter

Solution

  1. Step 1: Understand concat with axis=0 and ignore_index=True

    Rows from df2 are added below df1, and index resets from 0 to 2.
  2. Step 2: Combine rows and reset index

    Result has 3 rows with index 0,1,2 and columns A and B filled accordingly.
  3. Final Answer:

    A B 0 1 3 1 2 4 2 5 6 -> Option A
  4. Quick Check:

    concat vertical + ignore_index resets index [OK]
Hint: ignore_index=True resets row numbers after concat [OK]
Common Mistakes:
  • Expecting original index to remain
  • Confusing axis=0 with axis=1 output
  • Forgetting to pass DataFrames as list
4. What is wrong with this code snippet?
import pandas as pd
df1 = pd.DataFrame({'X': [1, 2]})
df2 = pd.DataFrame({'Y': [3, 4]})
result = pd.concat(df1, df2, axis=0)
print(result)
medium
A. Missing list brackets around DataFrames in concat.
B. axis=0 is invalid for concat.
C. DataFrames must have same columns to concat.
D. ignore_index=True is required.

Solution

  1. Step 1: Check concat() argument format

    concat() expects a list of DataFrames as first argument, but here two DataFrames are passed separately.
  2. Step 2: Identify correct usage

    Correct call is pd.concat([df1, df2], axis=0) with brackets around DataFrames.
  3. Final Answer:

    Missing list brackets around DataFrames in concat. -> Option A
  4. Quick Check:

    concat needs list of DataFrames [OK]
Hint: Always pass DataFrames as a list to concat() [OK]
Common Mistakes:
  • Passing DataFrames as separate arguments
  • Assuming axis=0 is invalid
  • Thinking ignore_index is mandatory
5. You have two DataFrames:
df1 = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Score': [85, 90]})
df2 = pd.DataFrame({'Name': ['Charlie'], 'Score': [88]})

You want to stack them vertically but keep the original index from both DataFrames. Which code will do this correctly?
hard
A. pd.concat([df1, df2], axis=0, ignore_index=True)
B. pd.concat(df1, df2, axis=0)
C. pd.concat([df1, df2], axis=1)
D. pd.concat([df1, df2], axis=0)

Solution

  1. Step 1: Understand index behavior in concat()

    By default, concat keeps original indexes unless ignore_index=True is set.
  2. Step 2: Choose correct parameters

    To stack vertically and keep indexes, use axis=0 without ignore_index.
  3. Final Answer:

    pd.concat([df1, df2], axis=0) -> Option D
  4. Quick Check:

    Default concat keeps original index [OK]
Hint: Omit ignore_index to keep original indexes [OK]
Common Mistakes:
  • Using ignore_index=True when original index is needed
  • Using axis=1 for vertical stacking
  • Passing DataFrames without list brackets
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