python - 确定点是否在移动(熊猫窗口函数)
问题描述
我有多个人的数据集(熊猫数据框),这些人拥有 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))
理想情况下,我们希望拥有基于时间和最少数据点的窗口,但这可能会使它变得更加困难......有什么建议/想法吗?
解决方案
推荐阅读
- javascript - 如何为 Google Chrome 创建可更改 URL 的扩展程序
- firebase - Android 和 iOS 设备上的最佳设置是什么,以保证 FCM 推送通知的最佳交付水平
- c# - Castle Windsor 通用类型注册
- ssis - 如何使用 WMI 查询来查看文件是否被拖放到文件夹中
- cqrs - CQRS/事件溯源:是否应该共享事件(类型)?
- java - 当 Concordion 测试失败时,有没有办法让堆栈跟踪显示在控制台中
- javascript - 使用formData上传jquery文件不起作用
- r - 使用 facet_wrap 时 ggplotly 添加的空图表
- mongodb - MongoDB:在树中搜索的推荐模式
- clojurescript - 单击时将跨度变成可编辑字段的试剂