考虑下面的数据帧“前进填充”:有效地重新索引一个水平的多指标数据帧
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