考虑以下测试数据集:
testdf = pandas.DataFrame({'t': [datetime(2015, 1, 1, 10, 0),
datetime(2015, 1, 1, 11, 32),
datetime(2015, 1, 1, 12, 0)],
'val': [1, 2, 3]})
我想使用简单的填充来插入这个数据集,这样我至少每30分钟就有一个数据点,同时保留原始数据点。
合适的结果如下:
't' 'val'
2015-01-01 10:00 1
2015-01-01 10:30 1
2015-01-01 11:00 1
2015-01-01 11:30 1
2015-01-01 11:32 2
2015-01-01 12:00 3
哪种方法可以达到这个效果,最好是使用标准的熊猫方法?
我知道DataFrame.resample
方法,但
a)我似乎无法找到how
参数的正确值来实现所需的简单填充,并且
b)我找不到将原始数据点保留在结果中的方法。
问题b)当然可以通过手动将原始数据点添加到重采样的DataFrame来规避,但我不会称之为特别简洁的解决方案。
答案 0 :(得分:3)
生成包含缺失时间戳的索引,并创建具有NaN
值的数据框。然后将其与combine_first
方法结合使用,并填写NaN
值:
idx = pandas.date_range(datetime(2015, 1, 1, 10, 0), datetime(2015, 1, 1, 12, 0), freq='30min')
df = pandas.DataFrame(numpy.nan, index=idx, columns=['val'])
testdf.set_index('t', inplace=True)
testdf.combine_first(df).fillna(method='ffill')
documentation of the combine_first
method读取:
将两个DataFrame对象组合在一起,默认为框架中的非空值 调用方法。结果索引列将是联合的 各自的索引和列
ffill
方法的fillna
方法执行以下操作(source):
ffill:将最后一次有效观察传播到下一个有效回填