2 レベルの階層インデックス ('item_id' と 'date') を持つ pandas データフレームがあります。各行には、特定の月の特定の項目に関するさまざまな指標の列があります。サンプルは次のとおりです。
total_annotations unique_tags
date item_id
2007-04-01 2 30 14
2007-05-01 2 32 16
2007-06-01 2 36 19
2008-07-01 2 81 33
2008-11-01 2 82 34
2009-04-01 2 84 35
2010-03-01 2 90 35
2010-04-01 2 100 36
2010-11-01 2 105 40
2011-05-01 2 106 40
2011-07-01 2 108 42
2005-08-01 3 479 200
2005-09-01 3 707 269
2005-10-01 3 980 327
2005-11-01 3 1176 373
2005-12-01 3 1536 438
2006-01-01 3 1854 497
2006-02-01 3 2206 560
2006-03-01 3 2558 632
2007-02-01 3 5650 1019
ご覧のとおり、各項目の連続したすべての月の観測値はありません。私がやりたいことは、各アイテムが指定された範囲の各月の行を持つようにデータフレームを再インデックス化することです。さて、これは任意のアイテムに対して簡単に達成できます。たとえば、item_id 99 の場合:
baseDateRange = pd.date_range('2005-07-01','2013-01-01',freq='MS')
data.xs(99,level='item_id').reindex(baseDateRange,method='ffill')
しかし、この方法では、すべての item_id を反復処理してから、すべてをマージする必要があり、非常に複雑に思えます。
では、これを完全なデータフレームに適用し、各 item_id が baseDateRange のすべての日付の行を適切に埋められるように、観察 (item_id インデックスも) を埋めるにはどうすればよいでしょうか?