Working with multiple levels

Reshaping Data with pandas

Maria Eugenia Inzaugarat

Instructor

Review

  • Stack and unstack DataFrames and Series
  • Choose a level to stack or unstack by name or number
  • Rearrange levels by combining unstack and stack
Reshaping Data with pandas

Rearranging multiple levels

  • Swap levels
  • Stack and unstack multiple levels at the same time
Reshaping Data with pandas

Swap levels

DataFrame and arrow showing swapping levels

  swaplevel method

Reshaping Data with pandas

Swap levels

cars
                         2019  2020
 price    Golf       VW    25    26
  sold    Golf       VW    68    72
 price  Passat       VW    31    32
  sold  Passat       VW    72    73
 price A-class Mercedes    41    42
  sold A-class Mercedes    68    69
 price C-class Mercedes    32    33
 sold  C-class Mercedes    75    74
Reshaping Data with pandas

Swap levels

cars
                         2019  2020
 price    Golf       VW    25    26
  sold    Golf       VW    68    72
 price  Passat       VW    31    32
  sold  Passat       VW    72    73
 price A-class Mercedes    41    42
  sold A-class Mercedes    68    69
 price C-class Mercedes    32    33
 sold  C-class Mercedes    75    74
cars.swaplevel(0, 2)
                        2019  2020
VW       Golf    price    25    26
                 sold     68    72
         Passat  price    31    32
                 sold     72    73
Mercedes A-class price    41    42
                 sold     68    69
         C-class price    32    33
                 sold     75    74
Reshaping Data with pandas

Swap levels and unstack

cars
                         2019  2020
 price    Golf       VW    25    26
  sold    Golf       VW    68    72
 price  Passat       VW    31    32
  sold  Passat       VW    72    73
 price A-class Mercedes    41    42
  sold A-class Mercedes    68    69
 price C-class Mercedes    32    33
 sold  C-class Mercedes    75    74
cars.swaplevel(0, 2).unstack()
                       2019       2020     
                 price sold price sold
Mercedes A-class    41   68    42   69
         C-class    32   75    33   74
     VW     Golf    25   68    26   72
          Passat    31   72    32   73
Reshaping Data with pandas

Swap levels and unstack

cars
                         2019  2020
 price    Golf       VW    25    26
  sold    Golf       VW    68    72
 price  Passat       VW    31    32
  sold  Passat       VW    72    73
 price A-class Mercedes    41    42
  sold A-class Mercedes    68    69
 price C-class Mercedes    32    33
 sold  C-class Mercedes    75    74
cars.unstack()
              Mercedes    VW Mercedes    VW
                  2019  2019     2020  2020
price A-class     41.0   NaN     42.0   NaN
      C-class     32.0   NaN     33.0   NaN
         Golf      NaN  25.0      NaN  26.0
       Passat      NaN  31.0      NaN  32.0
sold  A-class     68.0   NaN     69.0   NaN
      C-class     75.0   NaN     74.0   NaN
         Golf      NaN  68.0      NaN  72.0
       Passat      NaN  72.0      NaN  73.0
Reshaping Data with pandas

Swap levels and unstack

cars
                         2019  2020
 price    Golf       VW    25    26
  sold    Golf       VW    68    72
 price  Passat       VW    31    32
  sold  Passat       VW    72    73
 price A-class Mercedes    41    42
  sold A-class Mercedes    68    69
 price C-class Mercedes    32    33
 sold  C-class Mercedes    75    74
cars.unstack().swaplevel(0, 1, axis=1)
                        2019           2020      
              Mercedes    VW Mercedes    VW
price A-class     41.0   NaN     42.0   NaN
      C-class     32.0   NaN     33.0   NaN
         Golf      NaN  25.0      NaN  26.0
       Passat      NaN  31.0      NaN  32.0
sold  A-class     68.0   NaN     69.0   NaN
      C-class     75.0   NaN     74.0   NaN
         Golf      NaN  68.0      NaN  72.0
       Passat      NaN  72.0      NaN  73.0
Reshaping Data with pandas

Swap levels and stack

cars
                         2019  2020
 price    Golf       VW    25    26
  sold    Golf       VW    68    72
 price  Passat       VW    31    32
  sold  Passat       VW    72    73
 price A-class Mercedes    41    42
  sold A-class Mercedes    68    69
 price C-class Mercedes    32    33
 sold  C-class Mercedes    75    74
cars.stack()
price     Golf       VW   2019    25
                          2020    26
 sold     Golf       VW   2019    68
                          2020    72
price   Passat       VW   2019    31
                          2020    32
 sold   Passat       VW   2019    72
                          2020    73
price  A-class  Mercedes  2019    41
                          2020    42
 sold  A-class  Mercedes  2019    68
                          2020    69
Reshaping Data with pandas

Swap levels and stack

cars
                         2019  2020
 price    Golf       VW    25    26
  sold    Golf       VW    68    72
 price  Passat       VW    31    32
  sold  Passat       VW    72    73
 price A-class Mercedes    41    42
  sold A-class Mercedes    68    69
 price C-class Mercedes    32    33
 sold  C-class Mercedes    75    74
cars.stack().swaplevel(0, 2)
     VW     Golf   price  2019    25
                          2020    26
                    sold  2019    68
                          2020    72
          Passat   price  2019    31
                          2020    32
                    sold  2019    72
                          2020    73
Mercedes  A-class  price  2019    41
                          2020    42
                    sold  2019    68
                          2020    69
Reshaping Data with pandas

Multiple levels

Two DataFrames with multiple levels and some highlighted

Reshaping Data with pandas

Unstacking multiple levels

cars
year                       2019  2020
  brand     model  feature            
     VW      Golf    price   25    26
                      sold   68    72
           Passat    price   31    32
                      sold   72    73
Mercedes  A-class    price   41    42
                      sold   68    69
          C-class    price   32    33
                      sold   75    74
Reshaping Data with pandas

Unstacking levels by number

cars.unstack(level=[0, 1])
                year            2019                         2020                        
brand            VW         Mercedes          VW         Mercedes        
model   Golf Passat  A-class C-class Golf Passat  A-class C-class
feature                                                          
price    25     31        41      32   26     32       42      33
sold     68     72        68      75   72     73       69      74
Reshaping Data with pandas

Unstacking levels by name

cars.unstack(level=['brand', 'model'])
                year            2019                         2020                        
brand            VW         Mercedes          VW         Mercedes        
model   Golf Passat  A-class C-class Golf Passat  A-class C-class
feature                                                          
price    25     31        41      32   26     32       42      33
sold     68     72        68      75   72     73       69      74
Reshaping Data with pandas

Stacking multiple levels

cars_unstacked
   year                           2019                         2020                         
  brand            VW         Mercedes          VW         Mercedes        
  model   Golf Passat  A-class C-class Golf Passat  A-class C-class
feature                                                          
  price   25     31       41      32   26     32       42      33
   sold   68     72       68      75   72     73       69      74
Reshaping Data with pandas

Stacking by name or number

cars_unstacked.stack(level=[0, 1])
                model  A-class  C-class  Golf  Passat
feature year    brand                                   
  price 2019 Mercedes     41.0     32.0   NaN     NaN
                   VW      NaN      NaN  25.0    31.0
        2020 Mercedes     42.0     33.0   NaN     NaN
                   VW      NaN      NaN  26.0    32.0
   sold 2019 Mercedes     68.0     75.0   NaN     NaN
                   VW      NaN      NaN  68.0    72.0
        2020 Mercedes     69.0     74.0   NaN     NaN
                   VW      NaN      NaN  72.0    73.0
cars_unstacked.stack(level=['year', 'brand'])
                model  A-class  C-class  Golf  Passat
feature year    brand                                   
  price 2019 Mercedes     41.0     32.0   NaN     NaN
                   VW      NaN      NaN  25.0    31.0
        2020 Mercedes     42.0     33.0   NaN     NaN
                   VW      NaN      NaN  26.0    32.0
   sold 2019 Mercedes     68.0     75.0   NaN     NaN
                   VW      NaN      NaN  68.0    72.0
        2020 Mercedes     69.0     74.0   NaN     NaN
                   VW      NaN      NaN  72.0    73.0
Reshaping Data with pandas

Let's practice!

Reshaping Data with pandas

Preparing Video For Download...