处理多级索引

使用 pandas 重塑数据

Maria Eugenia Inzaugarat

Instructor

复习

  • 对 DataFrame 和 Series 进行堆叠与取消堆叠
  • 通过名称或编号选择要堆叠/取消堆叠的层级
  • 组合取消堆叠与堆叠以重新排列层级
使用 pandas 重塑数据

重排多级索引

  • 交换层级
  • 同时对多个层级进行堆叠与取消堆叠
使用 pandas 重塑数据

交换层级

DataFrame 和箭头,展示层级交换

  swaplevel 方法

使用 pandas 重塑数据

交换层级

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
使用 pandas 重塑数据

交换层级

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
使用 pandas 重塑数据

交换层级并取消堆叠

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
使用 pandas 重塑数据

交换层级并取消堆叠

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
使用 pandas 重塑数据

交换层级并取消堆叠

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
使用 pandas 重塑数据

交换层级并堆叠

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
使用 pandas 重塑数据

交换层级并堆叠

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
使用 pandas 重塑数据

多级索引

两个多级索引的 DataFrame,部分高亮

使用 pandas 重塑数据

取消多个层级的堆叠

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
使用 pandas 重塑数据

按编号取消堆叠

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
使用 pandas 重塑数据

按名称取消堆叠

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
使用 pandas 重塑数据

堆叠多个层级

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
使用 pandas 重塑数据

按名称或编号堆叠

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
使用 pandas 重塑数据

让我们来练习!

使用 pandas 重塑数据

Preparing Video For Download...