Python:平衡用于回归分析的数据集(重新排列数据集并填充空白类别)

Python:平衡用于回归分析的数据集(重新排列数据集并填充空白类别),python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,我有一个数据集(df2),如下所示: total_n ind_n4 year city_code 9 2003 a 236 2004 a 520 54 2002 b 167 2004 b 997 2005 b

我有一个数据集(df2),如下所示:

                            total_n
  ind_n4   year  city_code
     9     2003     a          236
           2004     a          520
    54     2002     b          167
           2004     b          997
           2005     b          476
           2006     b          742 
数据集示例:

df = pd.DataFrame( {'year':[2003,2004,2002,2004,2005,2006],
                    'city_code':['a']*2+['b']*4,
                    'total_tax':pd.np.random.randint(100,1000,6)},
                   index=pd.Index(data=[9]*2+[54]*4,name='ind_n4'))

df1 = df.set_index('year',append=True)
df2 = df1.set_index('city_code',append=True)
我要找的是一个平衡表,它看起来像这样:

                            total_n
  ind_n4  city_code  year  
     9        a      2002      0
                     2003     236
                     2004     520
                     2005      0
                     2006      0
              b      2002      0
                     2003      0
                     2004      0
                     2005      0
                     2006      0

    54        a      2002      0
                     2003      0
                     2004      0
                     2005      0
                     2006      0
              b      2002     167
                     2003      0
                     2004     997
                     2005     476
                     2006     742
为了做到这一点,我一直在使用这种方法,这是针对一个非常类似的例子提出的:

但是,当我使用这段代码时,我得到一个错误,它说:NotImplementedError:isna没有为多索引定义

非常感谢您的帮助

使用此:

df3 = df2.swaplevel(1,2)
df3.reindex(pd.MultiIndex.from_product(df3.index.levels), fill_value=0)\
   .rename_axis(df3.index.names, axis=0)
输出:

                       total_tax
ind_n4 city_code year           
9      a         2002          0
                 2003        317
                 2004        233
                 2005          0
                 2006          0
       b         2002          0
                 2003          0
                 2004          0
                 2005          0
                 2006          0
54     a         2002          0
                 2003          0
                 2004          0
                 2005          0
                 2006          0
       b         2002        956
                 2003          0
                 2004        609
                 2005        626
                 2006        811
详情:

  • 如果需要,使用swaplevel以获得正确的索引级别 秩序
  • 使用索引级别的乘积pd.MultiIndex.from_,可以创建 按该层次顺序排列的所有组合
  • 使用reindex使用fill_value参数创建缺少的行
  • 最后,重命名索引级别

非常好,熊猫的多指标水平仍然难以达到me@Vaishali我在一个多维立方体和分析的世界里工作。在我看来,多索引就像一个具有层次结构的维度。比如年->月->日。@ScottBoston,一个问题。我已经设法得到了df3。如何填写city code和ind_n4列,使其值包含在每一行中。谢谢!那么您缺少了源数据中没有出现的类似“c”的city_代码?
                       total_tax
ind_n4 city_code year           
9      a         2002          0
                 2003        317
                 2004        233
                 2005          0
                 2006          0
       b         2002          0
                 2003          0
                 2004          0
                 2005          0
                 2006          0
54     a         2002          0
                 2003          0
                 2004          0
                 2005          0
                 2006          0
       b         2002        956
                 2003          0
                 2004        609
                 2005        626
                 2006        811