Pivot column levels into row MultiIndex levels using the Pandas stack() method. Compress wide data structures into multi-level index rows while preserving structured hierarchy.
stack() method pivots column labels into inner row MultiIndex levels. It turns a wide DataFrame into a compact MultiIndex Series or DataFrame, making hierarchical data representation effortless.import pandas as pd
cols = pd.MultiIndex.from_tuples([("MATH", "Term1"), ("MATH", "Term2"), ("ENGLISH", "Term1"), ("ENGLISH", "Term2")])
df = pd.DataFrame([[85, 90, 78, 82], [88, 92, 80, 85]], index=["Ravi", "Raju"], columns=cols)
print(df)
assert df.shape == (2, 4)
Expected output
MATH ENGLISH
Term1 Term2 Term1 Term2
Ravi 85 90 78 82
Raju 88 92 80 85
df.stack() stacks the innermost column level (level=-1) into the row index.stacked = df.stack()
print(stacked)
assert stacked.index.nlevels == 2
Expected output
ENGLISH MATH
Ravi Term1 78 85
Term2 82 90
Raju Term1 80 88
Term2 85 92
level=0 to stack the outer subject level into rows instead of the term level.stacked_l0 = df.stack(level=0)
print(stacked_l0)
assert "MATH" in stacked_l0.index.get_level_values(1)
Expected output
Term1 Term2
Ravi ENGLISH 78 82
MATH 85 90
Raju ENGLISH 80 85
MATH 88 92
dropna=True drops resultant missing values. Set dropna=False to retain NaN entries.df_nan = df.copy()
df_nan.iloc[0, 0] = None
stacked_with_nan = df_nan.stack(future_stack=True)
print(stacked_with_nan)
assert pd.isna(stacked_with_nan.loc[("Ravi", "Term1"), "MATH"])
Expected output
ENGLISH MATH
Ravi Term1 78 NaN
Term2 82 90.0
Raju Term1 80 88.0
Term2 85 92.0
stack().ex_df = pd.DataFrame([[90, 95], [80, 85]], index=["Ravi", "Raju"], columns=["Math", "Science"])
answer = ex_df.stack()
print(answer)
assert len(answer) == 4 and answer.index.nlevels == 2
Expected output
Ravi Math 90
Science 95
Raju Math 80
Science 85
dtype: int64
Practice the stack() examples interactively directly in your browser:
Reference: Pandas stack() documentation.
Author & Instructor at plus2net
I write and maintain practical tutorials on Python, PHP, SQL, JavaScript, HTML, jQuery, and web development at plus2net. The tutorials focus on clear explanations, working examples, and code that readers can test and adapt while learning.