首页 > 解决方案 > 如果 Pandas 数据框中没有,Multindex 添加零值

问题描述

我有一个带有 multiindex('date', 'class') 的 pandas (v.0.23.4) 数据框。

                  Col_values
date       class            
2019-04-30 0             324
           1            6874
           2              44
           3               5
           4              15
2019-05-31 0             393
           1            6534
           2              64
           3               1
           4              22
2019-06-30 0             325
           1            5899
           2              48
           4               7

在 '2019-06-30' 中缺少第 3 类,因为没有数据。我想要的是在多索引中添加类 3,并在 Col_values 列中自动添加零值。

标签: pandasindexing

解决方案


DataFrame.unstackfill_value=0一起使用DataFrame.stack

df = df.unstack(fill_value=0).stack()
print (df)
                  Col_values
date       class            
2019-04-30 0             324
           1            6874
           2              44
           3               5
           4              15
2019-05-31 0             393
           1            6534
           2              64
           3               1
           4              22
2019-06-30 0             325
           1            5899
           2              48
           3               0
           4               7

另一种解决方案是DataFrame.reindex使用MultiIndex.from_product

mux = pd.MultiIndex.from_product(df.index.levels, names=df.index.names)
df = df.reindex(mux, fill_value=0)
print (df)
                  Col_values
date       class            
2019-04-30 0             324
           1            6874
           2              44
           3               5
           4              15
2019-05-31 0             393
           1            6534
           2              64
           3               1
           4              22
2019-06-30 0             325
           1            5899
           2              48
           3               0
           4               7

推荐阅读