<p>首先创建两个新列<code>X_SHIFTED</code>和<code>Y_SHIFTED</code>,它们代表每个轨迹ID的下一点坐标。我们通过组合<code>df.groupby</code>和<code>df.shift</code>来实现这一点:</p>
<pre><code>df[['X_SHIFTED', 'Y_SHIFTED']] = df.groupby('trackiD').shift()
</code></pre>
<p>然后,简单地使用点(<code>X_COORDINATES</code>,<code>Y_COORDINATES</code>)和(<code>X_SHIFTED</code>,<code>Y_SHIFTED</code>)之间的欧几里德距离公式。我们可以使用<code>df.apply</code>行方式(<code>axis=1</code>)以及<code>math.dist</code>来实现这一点:</p>
<pre><code>import math
df['DIST'] = df.apply(
lambda row: math.dist(
(row['X_COORDINATES'], row['Y_COORDINATES']),
(row['X_SHIFTED'], row['Y_SHIFTED'])
), axis=1)
</code></pre>
<p>输出:</p>
<pre><code> trackiD X_COORDINATES Y_COORDINATES X_SHIFTED Y_SHIFTED DIST
0 2 542.299805 23.388090 NaN NaN NaN
1 2 544.108215 23.575758 542.299805 23.388090 1.818122
2 2 545.300598 23.962421 544.108215 23.575758 1.253509
3 2 546.417053 25.049328 545.300598 23.962421 1.558152
4 2 546.198669 24.830357 546.417053 25.049328 0.309257
5 2 546.724915 24.916084 546.198669 24.830357 0.533183
6 2 547.037048 24.918982 546.724915 24.916084 0.312146
7 2 547.011963 24.785202 547.037048 24.918982 0.136112
8 2 547.649231 24.845772 547.011963 24.785202 0.640140
9 3 547.600525 24.613401 NaN NaN NaN
10 3 547.891479 24.268734 547.600525 24.613401 0.451054
11 3 548.580505 24.459103 547.891479 24.268734 0.714841
12 3 548.144409 23.915531 548.580505 24.459103 0.696886
13 3 548.626770 23.922005 548.144409 23.915531 0.482404
14 4 548.527222 24.134670 NaN NaN NaN
15 4 548.504211 23.642254 548.527222 24.134670 0.492953
16 4 548.936584 24.028818 548.504211 23.642254 0.579981
17 4 548.627869 23.295454 548.936584 24.028818 0.795693
</code></pre>
<p>要获取每条轨迹的距离总和,可以使用:</p>
<pre><code>df.groupby('trackiD')['DIST'].sum()
</code></pre>
<p>输出:</p>
<pre><code>trackiD
2 6.560621
3 2.345185
4 1.868628
Name: DIST, dtype: float64
</code></pre>