Python 在数据帧中填充缺失的数据

Python 在数据帧中填充缺失的数据,python,pandas,Python,Pandas,我有一个带有两个索引的熊猫数据帧 Column1 indexA indexB 1001 aaa 1 bbb 1 ccc 1 1002 ddd 1

我有一个带有两个索引的熊猫数据帧

                              Column1
indexA   indexB                        
1001     aaa                        1
         bbb                        1
         ccc                        1
1002     ddd                        1
         eee                        1
并且希望
indexB
的每个值都具有相同的值
indexA

                              Column1
indexA   indexB                        
1001     aaa                        1
         bbb                        1
         ccc                        1
         ddd                        0
         eee                        0
1002     aaa                        0
         bbb                        0
         ccc                        0
         ddd                        1
         eee                        1
我的第一个想法是取消堆叠,用0填充na,然后堆叠它,但这似乎有点过头了。有更简单的方法吗

EDIT:Alexander下面的回答虽然需要很长时间(我原来的数据帧有350k行),但仍然有效。我稍微改变了这个解决方案:

df =  pd.read_sql(sql=sql, con=db_eng, index_col=index)
idx = pd.MultiIndex.from_product([df.index.levels[0], df.index.levels[1]], names=df.index.names)
df.reindex(idx).fillna(value=0)
在发布此邮件后,还发现了以下两个问题:


    • 可能有更好的方法来实现这一点。我使用
      pd.MultiIndex.from\u product
      创建了一个新的多索引。然后,我用一个伪值创建了一个新的dataframe,加入了现有的dtaframe,并删除了伪列

      df = pd.DataFrame({'index_0': ['a', 'a', 'b', 'b', 'b'], 
                         'index_1': ['A', 'B', 'A', 'B', 'C'], 
                         'vals': [1, 2, 3, 4, 5]}).set_index(['index_0', 'index_1'])
      
      >>> df 
                       vals
      index_0 index_1      
      a       A           1
              B           2
      b       A           3
              B           4
              C           5
      
      idx = pd.MultiIndex.from_product([df.index.levels[0], df.index.levels[1]], 
                                       names=df.index.names)
      new_df = pd.DataFrame({'_dummy_': [1] * len(idx)}, index=idx).join(df)
      del new_df['_dummy_']
      
      >>> new_df
                       vals
      index_0 index_1      
      a       A           1
              B           2
              C         NaN
      b       A           3
              B           4
              C           5
      

      不,这似乎是一种合乎逻辑的方式。您还可以合并两个数据帧(对应于不同的值)并填充nas,但不会更短。我必须说,您在这里描述的内容似乎没有那么长。这是可行的,尽管它似乎没有比
      unstack().fillna(0).stack()
      快多少。fillna(0)可能是最简单的。