使用pandas填充信号时保留原始数据点

时间:2016-03-10 13:43:59

标签: python pandas

考虑以下测试数据集:

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来规避,但我不会称之为特别简洁的解决方案。

1 个答案:

答案 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:将最后一次有效观察传播到下一个有效回填