【发布时间】:2020-08-08 18:37:57
【问题描述】:
我需要在包含多个实时信号和一个时间戳列的数据框中找到某些触发器之间的数据。这些触发器保存在单独的数据框中。我有一个带有 for 循环的工作解决方案,它在我使用的相对较大的数据集上需要很长时间。我正在尝试通过列表理解来加快速度,但我找不到可行的解决方案。有谁知道如何更快地做到这一点?
for循环解决方案:
这是触发器数据框的样子:
timestamp_x start_trig id timestamp_y end_trig
0 1592724037612 1.0 12 1592724068408 -1.0
1 1592724459283 1.0 23 1592724490290 -1.0
2 1592724514246 1.0 17 1592724545450 -1.0
这是将旧数据框中名称为“data”的行附加到名称为 new_df 的新数据框中的代码
for i in range(len(df_trig)):
mask = data[(data['timestamp'] > df_trig.iloc[i].timestamp_x) & (data['timestamp'] < df_trig.iloc[i].timestamp_y)]
new_df = new_df.append(mask)
这是我尝试用生成器解决的问题,但它不适合我:
new_df = pd.DataFrame(data[(data['timestamp'] > low_lim) & (data['timestamp'] < upp_lim)] for low_lim,upp_lim in zip(df_trig['timestamp_x'], df_trig['timestamp_y']))
提前感谢您的回答!
编辑:
原始数据框包含如下:
timestamp id param1
0 1592724037612 23 56.1
1 1592724037712 23 56.1
2 1592724037812 23 56.0
...
100 1592724047612 17 54.7
目标是移动位于其他数据框的任何触发器对之间的所有行。因此,新数据框看起来几乎相同,只是缺少了超出触发数据框定义的范围的行。
【问题讨论】:
-
您的预期输出如何?
-
@sygneto 我编辑了上面的原始问题以使其更易于理解。非常感谢您的帮助。