如何在数据框中找到某点之前的曲线下方区域面积
我有一个包含加速度和时间值的数据表,我需要在某个特定时间点找到速度。
我现在用的方法是这样的:数据表里有加速度和时间值。这种方法给我的是整个曲线下的面积,而不是到某个特定点的面积。我该怎么才能得到仅到那个点的面积呢?
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))])