title: Filling in date gaps in MultiIndex Pandas Dataframe
body: <p>I would like to modify a pandas MultiIndex DataFrame such that each index group includes Dates between a specified range. I would like each group to fill in missing dates 2013-06-11 to 2013-12-31 with the value 0 (or <code>NaN</code>).</p>
  
  <pre><code>Group A, Group B, Date,           Value
  loc_a    group_a  2013-06-11      22
                    2013-07-02      35
                    2013-07-09      14
                    2013-07-30       9
                    2013-08-06       4
                    2013-09-03      40
                    2013-10-01      18
           group_b  2013-07-09       4
                    2013-08-06       2
                    2013-09-03       5
           group_c  2013-07-09       1
                    2013-09-03       2
  loc_b    group_a  2013-10-01       3
  </code></pre>
  
  <p>I've seen a few discussions of <code>reindex</code>ing, but that is for a simple (non-grouped) time-series data. </p>
  
  <p>Is there an easy way to do this?</p>
  
  <hr>
  
  <p>Following are some attempts I've made at accomplishing this.  For example: Once I've unstacked by <code>['A', 'B']</code>, I can then reindex.</p>
  
  <pre><code>df = pd.DataFrame({'A': ['loc_a'] * 12 + ['loc_b'],
                  'B': ['group_a'] * 7 + ['group_b'] * 3 + ['group_c'] * 2 + ['group_a'],
                  'Date': ["2013-06-11",
                          "2013-07-02",
                          "2013-07-09",
                          "2013-07-30",
                          "2013-08-06",
                          "2013-09-03",
                          "2013-10-01",
                          "2013-07-09",
                          "2013-08-06",
                          "2013-09-03",
                          "2013-07-09",
                          "2013-09-03",
                          "2013-10-01"],
                   'Value': [22, 35, 14,  9,  4, 40, 18, 4, 2, 5, 1, 2, 3]})
  
  df.Date = df['Date'].apply(lambda x: pd.to_datetime(x).date())
  df = df.set_index(['A', 'B', 'Date'])
  
  dt_start = dt.datetime(2013,6,1)
  all_dates = [(dt_start + dt.timedelta(days=x)).date() for x in range(0,60)]
  
  df2 = df.unstack(['A', 'B'])
  df3 = df2.reindex(index=all_dates).fillna(0)
  df4 = df3.stack(['A', 'B'])
  
  ## df4 is about where I want to get, now I'm trying to get it back in the form of df...
  
  df5 = df4.reset_index()
  df6 = df5.rename(columns={'level_0' : 'Date'})
  df7 = df6.groupby(['A', 'B', 'Date'])['Value'].sum()
  </code></pre>
  
  <p>The last few lines make me a little sad. I was hoping that at <code>df6</code> I could simply <code>set_index</code> back to <code>['A', 'B', 'Date']</code>, but that did not group the values as they are grouped in the initial <code>df</code> DataFrame.</p>
  
  <p>Any thoughts on how I can reindex the unstacked DataFrame, restack, and have the DataFrame in the same format as the original?</p>