我有一系列带有时间戳且间隔不规则的测量值。这些系列中的值始终表示测量值的变化--即没有变化就没有新值。此类系列的一个简单示例如下:
23:00:00.100 10
23:00:01.200 8
23:00:01.600 0
23:00:06.300 4
我想得到的是一系列等间隔的时间加权平均值,对于给定的例子,我可能会以秒为单位来确定频率,从而得到如下结果:
23:00:01 NaN ( the first 100ms are missing )
23:00:02 5.2 ( 10*0.2 + 8*0.4 + 0*0.4 )
23:00:03 0
23:00:04 0
23:00:05 0
23:00:06 2.8 ( 0*0.3 + 4*0.7 )
我正在寻找一个能解决这个问题的Python库,对我来说,这似乎是一个标准的问题,但是到目前为止,我还没有在像panda这样的标准库中找到这样的功能。
该算法需要考虑两件事:
- 时间加权平均
- 当形成平均值时考虑当前间隔之前(并且甚至可能超前)的值
用Pandas
data.resample('S', fill_method='pad') # forming a series of seconds
提供一个用户定义的聚合函数将允许形成时间加权平均值,但是由于忽略了间隔的开始,这个平均值也将是不正确的。更糟糕的是:用平均值填充该系列中的孔,在该示例中从上面导致第3、4和5秒的值为非零。
data = data.resample('L', fill_method='pad') # forming a series of milliseconds
data.resample('S')
以一定的准确性完成了这一任务,但是--取决于准确性--非常昂贵。就我而言,太贵了。
4条答案
按热度按时间mrfwxfqh1#
您可以使用traces执行此操作。
结果是:
8i9zcol22#
这里有一个解决方案,它可能需要一些调整,以满足您的要求。
将秒数添加到索引中并向前填充:
取下一个值的时间差(使用
shift
),并乘以(值 * 秒):然后重新采样到秒(将值 * 秒相加):
bbmckpt73#
这不是一个答案,但我需要一些图表来确定时间加权平均值是多少。下面是一个用数据绘制的图表:
是否需要每个垂直跨度的平均值?第一个跨度为0-1,因为它包含未知数据,所以结果为NaN。第二个块为1-2,该值的计算方法为:(100.2 + 80.4 + 0*0.4)和你的一样,但我不知道5-6的价值是怎么来的:
你能解释一下这个值是怎么计算出来的吗?
ldfqzlk84#
此答案以edit的形式发布在CC BY-SA 3.0下,通过OP Tim Tröndle将不规则时间戳测量值转换为等间隔的时间加权平均值。