如何为一个多指标级别的所有缺失值添加行?

问题描述:

假设我有以下数据帧df,由3级多索引索引:如何为一个多指标级别的所有缺失值添加行?

In [52]: df 
Out[52]: 
      C 
L0 L1 L2 
0 w P 1 
    y P 2 
     R 3 
1 x Q 4 
     R 5 
    z S 6 

代码来创建数据帧:

idx = pd.MultiIndex(levels=[[0, 1], ['w', 'x', 'y', 'z'], ['P', 'Q', 'R', 'S']], 
        labels=[[0, 0, 0, 1, 1, 1], [0, 2, 2, 1, 1, 3], [0, 0, 2, 1, 2, 3]], 
        names=['L0', 'L1', 'L2']) 

df = pd.DataFrame({'C': [1, 2, 3, 4, 5, 6]}, index=idx) 

L2水平的可能值是'P''Q','R''S',但是对于其余级别的特定值组合,缺少其中一些值。例如,组合(L0=0, L1='w', L2='Q')不存在于df中。

我想向df添加足够的行,以便对于L2以外的其他级别的值的每个组合,每个L2级别的可能值都有一行。对于添加的行中,C列的值应为0

IOW,我想扩大df,使它看起来像这样:

  C 
L0 L1 L2  
0 w P 1 
     Q 0 
     R 0 
     S 0 
    y P 2 
     Q 0 
     R 3 
     S 0 
1 x P 0 
     Q 4 
     R 5 
     S 0 
    z P 0 
     Q 0 
     R 0 
     S 6 

要求:

  • 操作应该保持列的类型不变;
  • 操作应该添加到完成只有指定的级别(L2

是否有进行这种扩张的简单方法所需要的最小数量的行?

假设L2最初包含所有你需要,你可以使用unstack.stack招的可能值:

df.unstack('L2', fill_value=0).stack(level=1) 

enter image description here