6

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 インデックスも) を埋めるにはどうすればよいでしょうか?

4

2 に答える 2