python - 按给定的时间增量查找数据帧列中的时间戳

标签 python pandas numpy

我有一个包含时间戳列的数据框。我的目标是找到每行的第一个时间戳,该时间戳大于该行的时间戳给定的偏移量(例如 0.01 秒)。我尝试使用 the answer given here ,以修改后的方式,例如:

def getTime(col, base, offset=0.01):
    later = filter(lambda d: d > base+dt.timedelta(seconds=offset), col)
    return min(later)

testTbt['testTime']=testTbt['exchTstamp'].apply(lambda time: getTime(testTbt[testTbt['exchTstamp']>time]['exchTstamp'].iloc[0:100].tolist(), time, 0.01))

但出现错误:ValueError:min() arg 是一个空序列

时间戳为微秒级别,包含重复值且按递增顺序排列。

这是数据框的初始行:

    exchTstamp                  seqNum prev10mSecAvg prev1SecAvg    imbRegime
0   2019-08-14  09:15:00.022991 199    0.000000      0.000000       0
1   2019-08-14  09:15:00.022995 200   -0.166667     -0.166667       3
2   2019-08-14  09:15:00.022999 201   -0.277778     -0.277778       2
3   2019-08-14  09:15:00.023003 202   -0.333333     -0.333333       2
4   2019-08-14  09:15:00.023007 203   -0.386667     -0.386667       2

可以下载 csv 数据 here .

预期输出是数据帧中添加的一列,其中包含后续时间戳中的第一个时间戳,该时间戳比当前行的时间戳至少大 0.01 秒。例如:- 对于给定的数据集,第一行的新列(时间为 09:15:00.022995)应具有值 09:15:00.033136。对于后续的每一行都相同。

一点指导会有很大帮助。

最佳答案

我认为最快、最简单的方法是使用 searchsorted 。如果没有大于 df.exchTstamp+delta 的元素,则 searchsorted 将返回数组的长度,即超出数据帧索引范围的索引。因此,我们首先需要为这种情况插入一个 nan/NaT 哨兵行,然后将其删除:

import numpy as np, pandas as pd, datetime as dt

df = pd.read_csv('stack.csv', index_col=0, parse_dates=[1])
delta = dt.timedelta(seconds=0.01)

res = np.searchsorted(df.exchTstamp, df.exchTstamp+delta)

# add sentinel
df.append(pd.Series(), ignore_index=True)

df["testTime"] = df.loc[res,'exchTstamp'].values

# remove sentinel
df = df.drop(df.index[-1])

df.to_csv('stack-out.csv')

关于python - 按给定的时间增量查找数据帧列中的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57604025/

相关文章:

python - Pandas 存储 1000 个数据框对象

python - Pandas 数据框中的圆形 float 列

python - Numpy reshape 产生不同的大小错误

python - Kivy 创建小部件的新实例

python - 使用 Python Paramiko 的嵌套 SSH

python - Matlab 相当于 Python Panda 的数据类型

python - 根据日期合并(numpy)数组

python - 平均值、纳米平均值和警告 : Mean of empty slice

python - Flask App Builder 在数组上抛出 KeyError

python - key 错误 : column not found. ..但它就在那里