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

Posted

技术标签:

【中文标题】在熊猫数据框中计算速度的函数【英文标题】:A function to calculate velocity in pandas dataframe 【发布时间】:2020-06-18 13:01:18 【问题描述】:

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

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()))

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

谢谢!

【问题讨论】:

速度在什么时候?初速度? @AnnZen 更像是速度的时间序列,所以在每个索引(以上 0-3)我想有一个速度向量 speed 是数据框的名称吗? @SurajSubramanian 是的,为了加速,我创建了一个名为 acc 的新 df,但是是的。 【参考方案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

在 time=0 时,我们位于位置 [1,1] 在 time=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 来计算每个时间间隔的行进距离。

速度只是(行驶距离)/(时间间隔长度)

【讨论】:

这输出一个标量,速度不是一个向量吗? 使用您提供的数据框,这将输出四个值,对应于每个时间点的速度。我已将输出编辑为答案 那么在每个时间点,速度是与该索引处的位置向量相关联的标量?如果是这样,为什么? (对不起,我研究这些已经有一段时间了,所以记不太清了) @oam 我试图在我的编辑中解释二维情况【参考方案2】:

如果您正在寻找作为矢量的速度,您可以使用与计算加速度几乎完全相同的代码,除了在bar_head_xbar_head_ybar_head_z 上运行它以获得velocity_head_x 和以此类推,对于速度矢量的每个分量。

【讨论】:

以上是关于在熊猫数据框中计算速度的函数的主要内容,如果未能解决你的问题,请参考以下文章

如何计算熊猫数据框中组的每对行之间的函数

熊猫应用函数将多个值返回到熊猫数据框中的行

Python:函数返回的值未在熊猫数据框中更新

如何一次将函数应用于熊猫数据框中的多个列

应用一个函数来翻译熊猫数据框中的一列,条件是其他列

如何在熊猫数据框中使用应用时创建列时间戳?