删除数据帧中彼此接近或在阈值内的时间戳

问题描述 投票:0回答:1

问题: 我有很多数据点在时间戳方面彼此太接近,这意味着当我操纵数据时,我会过度采样。

我需要什么: 对于数据框中的每个元素,我需要删除距其 5 秒范围内的所有元素。这意味着第一行是我正在使用的行,并且需要删除 5 秒内的后续行。这就是我现在拥有的:

test_df = test_df.sort_values(by='timestamp').reset_index(drop=True)
for i in range(0, len(test_df)):
    currentTimestamp = test_df.timestamp.loc[i]
    temp_row = test_df.loc[i]
    temp_5_secs = add_ms(currentTimestamp, 5000)
    test_df = test_df[(test_df.timestamp) >= temp_5_secs].reset_index(drop=True)
    test_df = test_df.append(temp_row, ignore_index=True)
    test_df = test_df.sort_values(by='timestamp').reset_index(drop=True)


def add_ms(timestamp, ms):
    return int(timestamp) + 1000000* ms

但它给了我以下错误:

ValueError Traceback(最近一次调用最后一次) /local/home/python3.7/site-packages/pandas/core/indexes/range.py in get_loc(self, key, method,lerance) 第354章 --> 355 返回 self._range.index(new_key) 第356章

值错误:235 不在范围内

这是一个示例数据框:

index timestamp value 0 1675434673166538783 14.62 1 1675434684419325010 14.62 2 1675434684420505291 14.62 3 1675434673164456809 14.63 4 1675434700772654637 14.50
总结,对于数据帧中的每个时间戳元素,删除距该元素 5 秒范围内的后续元素。通过删除行来删除。对每个元素执行此操作,以便我们知道结果将是不存在时间戳彼此小于 5 秒的行。

提前致谢!

python python-3.x pandas numpy timestamp
1个回答
0
投票
完成您想要做的事情的一种方法如下:

给定样本 df。

    排序以确保时间戳升序
  1. 创建要删除的行列表
  2. 删除索引。
要执行这些步骤,请创建以下函数。

def mask_stamp(k: list, time_incr: int)-> list[bool]: # return a list of bool values where True implies drop row last_time = 0 delta_t = time_incr * 1000000000 rslt = [] for tstmp in k: if tstmp > last_time: rslt.append(False) last_time = tstmp + delta_t else: rslt.append(True) return rslt def filter_timestamps(dfx: pd.DataFrame, time_inc:int)-> None: # return df with timestamps filtered by time increment drp_list = mask_stamp(dfx['timestamp'].to_list(), time_inc) for i in range(len(drp_list)): if drp_list[i]: dfx.drop(index= i, inplace= True)
然后执行以下操作:

df.sort_values(by=['timestamp'], ignore_index=True, inplace=True) filter_timestamps(df, 5)
这产生:

timestamp value 0 1675434673164456809 14.63 2 1675434684419325010 14.62 4 1675434700772654637 14.50
    
© www.soinside.com 2019 - 2024. All rights reserved.