使用时间增量

时间:2016-01-25 20:19:44

标签: python pandas

我试图在时间间隔而不是行迭代上比较行数据。即我想比较一个值与它的相似价值来自' X'分钟前。

我的数据框中的每一行都不是标准化的时间增量。

具体来说,我想将此子集数据帧中的heading值与2分钟之前的值进行比较。

我尝试过一些方法,比如timedeltas和.shift()方法,但到目前为止还没有任何快乐,我自己也很困惑。任何想法或帮助将不胜感激。

index                heading               times
2015-12-09 03:00:01      NaN 2015-12-09 03:00:01
2015-12-09 03:01:07   231.12 2015-12-09 03:01:07
2015-12-09 03:01:08     0.00 2015-12-09 03:01:08
2015-12-09 03:01:10    90.00 2015-12-09 03:01:10
2015-12-09 03:01:15    90.00 2015-12-09 03:01:15
2015-12-09 03:02:22   149.23 2015-12-09 03:02:22
2015-12-09 03:02:25     0.00 2015-12-09 03:02:25
2015-12-09 03:02:32   270.00 2015-12-09 03:02:32
2015-12-09 03:02:40      NaN 2015-12-09 03:02:40
2015-12-09 03:02:42    90.00 2015-12-09 03:02:42
2015-12-09 03:02:48   270.00 2015-12-09 03:02:48
2015-12-09 03:03:15     9.39 2015-12-09 03:03:15
2015-12-09 03:03:17   210.77 2015-12-09 03:03:17
2015-12-09 03:03:35   153.61 2015-12-09 03:03:35
2015-12-09 03:03:39    90.00 2015-12-09 03:03:39
2015-12-09 03:03:40   263.84 2015-12-09 03:03:40
2015-12-09 03:03:46   351.30 2015-12-09 03:03:46
2015-12-09 03:03:48   270.00 2015-12-09 03:03:48
2015-12-09 03:03:50   267.69 2015-12-09 03:03:50
2015-12-09 03:03:51   270.00 2015-12-09 03:03:51
2015-12-09 03:04:10   205.03 2015-12-09 03:04:10
2015-12-09 03:04:11    90.00 2015-12-09 03:04:11
2015-12-09 03:04:12   270.00 2015-12-09 03:04:12
2015-12-09 03:04:18      NaN 2015-12-09 03:04:18
2015-12-09 03:04:24     0.00 2015-12-09 03:04:24

2 个答案:

答案 0 :(得分:0)

我一直在使用以下内容(有 2 分钟的差异):

def diff(ref):
    refvalue = ref['heading']
    selection = data.index - ref.name == np.timedelta64(2, 'm')
    values = data['heading'].loc[selection] - refvalue
    return values.mean()

data['diff'] = data.apply(diff, axis=1)

但这不是很有效,因为它进行了 O(n^2) 比较。例如,可以跳过一半的条目,因为它们是将来的。

我希望有人能提出更好的建议。

答案 1 :(得分:0)

这可以通过 reindex 函数实现,参见

Shifting row by delta time in Pandas

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.reindex.html

也许您想要 method='nearest'。