一种在熊猫数据框中计算速度的函数

时间:2020-06-18 13:01:18

标签: python pandas acceleration

我在想,是否有一些函数/库可以计算熊猫数据框中的速度。我有以下数据框:

Time    bar_head_x  bar_head_y  bar_head_z
0.00    -203.3502   1554.3486   1102.8210
0.01    -203.4280   1554.3492   1103.0592
0.02    -203.4954   1554.3234   1103.2794   
0.03    -203.5022   1554.2974   1103.4522

据此,我想计算速度,速度和加速度。速度和加速度很容易:我使用np.linalg.norm来计算速度,就像这样:

speed['head'] = np.linalg.norm(speed[['bar_head_x','bar_head_y','bar_head_z']].values,axis=1)

.diff()来计算速度加速度,就像这样:

acc['acc_head'] = (speed['head'].diff()) / ((speed['Time'].diff()))

但是我将如何以这种简单的方式计算速度?有没有这样的方法-一个功能来帮助做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您想将速度作为向量,则可以使用几乎完全相同的代码来计算加速度,只是在bar_head_xbar_head_ybar_head_z上运行对于速度矢量的每个分量,获取velocity_head_x,依此类推。

答案 1 :(得分:1)

df.diff()给您下一个减去当前行。

由于您的bar_head...列指示位置,因此可以将df.diff生成的差异解释为从当前位置指向下一个位置的向量。这些向量的np.linalg.norm可以为您提供向量的长度,即每个间隔行进的距离。按时间间隔除以速度。

diff = df.diff()

coords = [c for c in df.columns if not 'Time' in c]
np.linalg.norm(diff[coords], axis=1)/diff['Time']


0          NaN
1    25.058420
2    23.172492
3    17.487733

编辑:

2D情况的解释

假设我们具有以下数据框:

df = pd.DataFrame({'time':[0,1], 'x':[1,2], 'y':[1,2]})

    time    x   y
0   0       1   1
1   1       2   2

在时间= 0时,我们位于位置[1,1] 在时间= 1,我们已经移至位置[2,2]

因此,我们在x方向旅行了1,在y方向旅行了1。 我们旅行的总距离为sqrt(1 ^ 2 + 1 ^ 2)= sqrt(2)

使用df.diff(),我们得到

    time    x   y
0   NaN     NaN NaN
1   1.0     1.0 1.0

在这里,我们将第1行中的1.0、1.0解释为从时间t = 0处的位置指向时间t = 1处的位置的向量。

该向量的长度可以通过其范数来计算,并且其计算结果为2的平方根。

因此,我们可以使用np.linalg.norm计算每个时间间隔的行进距离。

速度就是(行进的距离)/(时间间隔的长度)

相关问题