पाठ 15 / 25

Pivot Tables and Reshaping

Long and wide formats.

pivot_table, melt, crosstab

Data is long (one row per observation: month, city, revenue) or wide (one column per city). pivot_table goes from long to wide with an aggregation, so duplicate entries (two Pune rows in February) are summed. melt goes back from wide to long, which most plotting and modelling tools prefer. crosstab counts combinations of two categories.

Long to wide and back, run

I ran this with Python 3.12.3 and pandas 3.0.6. The pivot sums February Pune revenue (60 + 40 = 100); melt returns to long format; crosstab counts rows per month and city (sorted alphabetically).

import pandas as pd

df = pd.DataFrame({
    "month": ["Jan", "Jan", "Feb", "Feb", "Feb"],
    "city": ["Delhi", "Pune", "Delhi", "Pune", "Pune"],
    "revenue": [100, 80, 120, 60, 40],
})
wide = df.pivot_table(index="month", columns="city", values="revenue",
                      aggfunc="sum", sort=False)
print(wide)
long = wide.reset_index().melt(id_vars="month", var_name="city", value_name="revenue")
print(long)
print(pd.crosstab(df["month"], df["city"]))

Output:

city   Delhi  Pune
month             
Jan      100    80
Feb      120   100
  month   city  revenue
0   Jan  Delhi      100
1   Feb  Delhi      120
2   Jan   Pune       80
3   Feb   Pune      100
city   Delhi  Pune
month             
Feb        1     2
Jan        1     1

Store long, present wide

Keep data long for processing and pivot to wide only for reports.

त्वरित जाँच: What happens to duplicate (month, city) pairs in pivot_table?

  • They are combined with the aggregation function
  • They raise an error
  • Only the first is kept
  • They become new columns
Answer

They are combined with the aggregation function — pivot_table aggregates; pivot would fail.