5
我有一個帶有兩級分層索引('item_id'和'date')的熊貓數據框。每行有特定月份中特定項目的各種指標的列。這裏有一個例子:在大熊貓的層次索引的一個級別上重新編譯和填充
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_IDS迭代,然後合併一切融合在一起,這似乎遠遠過於複雜。
那麼我該如何將這個應用到完整的數據框,填充觀察結果(還包括item_id索引),以便每個item_id都能正確填充baseDateRange中所有日期的行?
真棒,但有兩個澄清:首先,你已經這樣做了,我留下的ITEM_ID指數的頂部冗餘ITEM_ID列。然而,看來我可以通過修改你的代碼來處理'df.groupby(level ='item_id')。apply(lambda x:x.reset_index(level ='item_id',drop = True).reset_index()。 set_index( '日期')。重新索引(IDX,方法= 'ffill'))'。這看起來合理嗎?第二:爲什麼日期不再像原始數據框那樣顯示爲標題中的索引?我不認爲這是一個問題,但你能解釋發生了什麼?數據幀是否仍然具有分層索引或...? – moustachio
對你的第一部分的回答是肯定的,這是合理的,你可以放在reset_index沒有一個dup。對於第二種,我認爲由於您的彙總方式(因此它將刪除索引的名稱),索引有點困惑。你可以在應用程序中執行另一個reset_index,然後在最後(在應用程序''.reset_index(drop = True).set_index(['date','item_id'])''之後,重置mi – Jeff
Hm ...這實際上並不起作用(我認爲日期索引適用於每個組,因此不能作爲實際數據框的索引訪問),但我認爲這在任何情況下都適用。 – moustachio