Python 确定点是否正在移动(窗口功能)

Python 确定点是否正在移动(窗口功能),python,pandas,coordinates,rolling-computation,Python,Pandas,Coordinates,Rolling Computation,我有一个多人的数据集(熊猫数据框),他们有一个gps设备,并且随着时间的推移跟踪他们的位置。此数据集如下所示: person_id | timestamp | latitude | longitude 1 | 2019-05-15 10:01:53.231 | 10.00110 | 5.64321 1 | 2019-05-15 10:02:54.131 | 10.00310 | 5.64322 1 | 2019-05-1

我有一个多人的数据集(熊猫数据框),他们有一个gps设备,并且随着时间的推移跟踪他们的位置。此数据集如下所示:

person_id | timestamp               | latitude | longitude
1         | 2019-05-15 10:01:53.231 | 10.00110 | 5.64321
1         | 2019-05-15 10:02:54.131 | 10.00310 | 5.64322
1         | 2019-05-15 10:03:55.331 | 10.00210 | 5.64325
1         | 2019-05-15 10:05:00.731 | 10.00410 | 5.64421
1         | 2019-05-15 10:06:48.434 | 10.00510 | 5.64121
1         | 2019-05-15 10:07:24.189 | 10.01110 | 5.63321
1         | 2019-05-15 10:08:53.231 | 10.02110 | 5.62821
2         | 2019-05-15 10:02:41.111 | 10.01131 | 5.64320
2         | 2019-05-15 10:03:47.221 | 10.01132 | 5.64322
2         | 2019-05-15 10:05:53.121 | 10.01130 | 5.64321
2         | 2019-05-15 10:07:24.564 | 10.01401 | 5.64331
etc.
因此,GPS设备经常测量它们的位置。有时我们会忽略一些要点,但总体而言,数据集相当不错。但是,由于设备/GPS的精度,即使您不移动,GPS坐标也会有点跳跃

我想做的是添加一列,指示一个人是否正在移动。为此,我考虑使用滚动窗口,计算窗口中的平均位置,然后计算到该位置的距离(geopy.distance.distance()),如果窗口中任何点的距离大于给定阈值(例如15m),则这些点被视为“移动”

我在互联网上到处找了找,但真的找不到如何做到这一点(不使用低效for循环)。我会研究这样的事情:

df['moving'] = df.groupby(['mmsi']).rolling(
    window=10).apply(
        ... some function here, like:
        np.any([distance(
            lat_mean,
            lon_mean,
            row_lat,
            row_lon
        ) for row in window] > threshold))
理想情况下,我们希望窗口基于时间和最少的数据点,但这可能会使它更加困难。。。 有什么建议/想法吗