Python:平衡用于回归分析的数据集(重新排列数据集并填充空白类别)
我有一个数据集(df2),如下所示: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
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参数创建缺少的行
- 最后,重命名索引级别
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