考慮下面的數據幀「前進填充」:有效地重新索引一個水平的多指標數據幀
value
item_uid created_at
0S0099v8iI 2015-03-25 10652.79
0F01ddgkRa 2015-03-25 1414.71
0F02BZeTr6 2015-03-20 51505.22
2015-03-23 51837.97
2015-03-24 51578.63
2015-03-25 NaN
2015-03-26 NaN
2015-03-27 50893.42
0F02BcIzNo 2015-03-17 1230.00
2015-03-23 1130.00
0F02F4gAMs 2015-03-25 1855.96
0F02Vwd6Ou 2015-03-19 5709.33
0F04OlAs0R 2015-03-18 321.44
0F05GInfPa 2015-03-16 664.68
0F05PQARFJ 2015-03-18 1074.31
2015-03-26 1098.31
0F06LFhBCK 2015-03-18 211.49
0F06ryso80 2015-03-16 13.73
2015-03-20 12.00
0F07gg7Oth 2015-03-19 2325.70
我需要採樣兩個日期start_date
和end_date
之間的全面數據幀上之間的每一個日期他們宣傳最後看到的價值。採樣應在每個item_uid
獨立/分開進行。
例如,如果我們的0F02BZeTr6
2015-03-20
和2015-03-29
之間來樣,我們應該得到:
0F02BZeTr6 2015-03-20 51505.22
2015-03-21 51505.22
2015-03-22 51505.22
2015-03-23 51837.97
2015-03-24 51578.63
2015-03-25 51578.63
2015-03-26 51578.63
2015-03-27 50893.42
2015-03-28 50893.42
2015-03-29 50893.42
注意,我向前數據幀都填充NaN
和缺少的條目。
This other question解決了類似的問題,但只有一個組(即一個級別)。這個問題改爲詢問如何在每個組內(item_uid
)單獨進行。雖然我可以拆分輸入數據幀並遍歷每個組(每個item_uid
),然後將結果拼接在一起,但我想知道是否有更有效的方法。
當我做了以下(見this PR):
dates = pd.date_range(start=start_date, end=end_date)
df.groupby(level='itemuid').apply(lambda x: x.reindex(dates, method='ffill'))
我得到:
TypeError: Fill method not supported if level passed
謝謝安迪。很有幫助!解決方案非常有意義。至於'asfreq('D')'你是否開啓了一個GitHub問題?否則請告訴我,我可以幫忙。 – 2015-04-07 13:44:46
請[做](https://github.com/pydata/pandas/issues):)我還沒有檢查主人是否仍然如此。但如果是這樣,希望應該是一個簡單的修復! – 2015-04-07 21:08:11