在 pandas 数据帧中计算速度的函数
A function to calculate velocity in pandas dataframe
我想知道是否有一些 function/library 可以计算 pandas 数据帧中的速度。我有以下数据框:
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()))
但是我该如何以这种简单的方式计算速度呢?有没有这样的方法 - 一个功能来帮助做到这一点?
谢谢!
如果您正在寻找作为矢量的速度,您可以使用与计算加速度几乎完全相同的代码,除了 运行 它超过 bar_head_x
、bar_head_y
和bar_head_z
以获得速度矢量的每个分量的 velocity_head_x
等等。
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
编辑:
二维案例的解释
假设我们有以下数据框:
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]
在 time=1 我们已经移动到位置 [2,2]
所以,我们在 x 方向和 y 方向分别走了 1 次和 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来计算每个时间间隔的行进距离。
速度就是(行进的距离)/(时间间隔的长度)
我想知道是否有一些 function/library 可以计算 pandas 数据帧中的速度。我有以下数据框:
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()))
但是我该如何以这种简单的方式计算速度呢?有没有这样的方法 - 一个功能来帮助做到这一点?
谢谢!
如果您正在寻找作为矢量的速度,您可以使用与计算加速度几乎完全相同的代码,除了 运行 它超过 bar_head_x
、bar_head_y
和bar_head_z
以获得速度矢量的每个分量的 velocity_head_x
等等。
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
编辑:
二维案例的解释
假设我们有以下数据框:
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] 在 time=1 我们已经移动到位置 [2,2]
所以,我们在 x 方向和 y 方向分别走了 1 次和 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来计算每个时间间隔的行进距离。
速度就是(行进的距离)/(时间间隔的长度)