如何在数据框中找到某点之前的曲线下方区域面积

0 投票
1 回答
44 浏览
提问于 2025-04-14 16:47

我有一个包含加速度和时间值的数据表,我需要在某个特定时间点找到速度。

我现在用的方法是这样的:数据表里有加速度和时间值。这种方法给我的是整个曲线下的面积,而不是到某个特定点的面积。我该怎么才能得到仅到那个点的面积呢?

mainData = data.assign(
z_velocity = lambda df: numpy.trapz(x=df[time], y=df[zAccel])
)

我还尝试过用加速度乘以时间值来创建一个叫 z_velocity 的东西。然后在创建之后,再回过头来给 z_velocity 的每个值分配一个新值,这个新值是基于它前一个值和它前面一个位置的 z_velocity 值来计算的。但这个方法没有成功。

我对 pandas 还比较陌生,做事情的方式让我有点困惑。

1 个回答

0

要计算到时间点 t 的面积,你可以通过只使用数据表的前 t 行来限制计算范围:

velocity_at_t = numpy.trapz(x=df[time][:t], y=df[zAccel][:t])

因为所有的计算都是在离散的时间步长中进行的,并且 velocity(t+1) = velocity(t) + acceleration(t),所以我们可以用更简单的方法来计算每个时间步的速度。如果初始速度是 0,那么我们可以设置:

df["velocity"] = df.zAccel.cumsum() - df.zAccel[0]

运行完这个后,你可以验证在每个时间步上,你得到了:

all(df["velocity"] == [numpy.trapz(x=df.time[:t+1], y=df.zAccel[:t+1]) for t in range(len(df))]) 

撰写回答