pandas 在Python中通过每个时间段的最大位置过滤运动数据

carvr3hs  于 2023-06-04  发布在  Python
关注(0)|答案(1)|浏览(176)

我尝试在python中按时间和位置过滤数据点,以便在数据集中只留下每秒时间的最高位置。现在的情况是这样的,我用一个运动传感器来记录Spring/质量系统的振荡,我试图做一个指数曲线拟合的阻尼。最高位置随着时间的推移而降低,并且周期持续约一秒。我想,如果我把时间转换成整数,那么我就可以去掉所有的东西,除了每秒的最大位置。我不知道如何做到这一点,同时保持一切有序,以便当我完成时,每个位置仍然与正确的时间对齐。
我试着使用Excel,但它一直冻结,因为我的数据包括每一个位置,当我试图做一个趋势线,它遵循的平均水平。

snz8szmq

snz8szmq1#

因为你实际上只想要峰值,你可以试试这个:
为演示初始化一些值。你不需要这个。

import numpy as np
import pandas as pd
import matplotlib.pyplot as pl

x = np.arange(0, 100)
y = np.sin(x/3)*np.exp(-x/20)

df = pd.DataFrame({"y": y}, index=x)

我想将每个点与前一个点和下一个点进行比较,因此我创建了三个序列:

df_minus_1 = df.y[0:-2]
df_0       = df.y[1:-1]
df_plus_1  = df.y[2:]

然后找出哪些点比两个相邻点大:

peaks = (df_minus_1.values < df_0.values) & (df_plus_1.values <= df_0.values)

并使用此数组筛选原始DataFrame:

df_peak = df_0[peaks]

你可以在这里看到结果:

pl.plot(x, y)
pl.plot(df_peak, "o")

相关问题