【发布时间】:2018-12-06 00:41:38
【问题描述】:
我的车辆跟踪系统有一组数据,需要我根据经纬度计算距离。了解通过使用半正弦公式可以帮助获得行之间的距离,但我有点卡住了,因为我需要基于 2 个字段(模型类型和模式)的距离。
如下图是我的代码:
def haversine(lat1,lon1,lat2,lon2, to_radians = True, earth_radius =6371):
if to_radians:
lat1,lon1,lat2,lon2 = np.radians([lat1,lon1,lat2,lon2])
a = np.sin((lat2-lat1)/2.0)**2+ np.cos(lat1) * np.cos(lat2) * np.sin((lon2-lon1)/2.0)**2
return earth_radius *2 * np.arcsin(np.sqrt(a))
mydataset = pd.read_csv(x + '.txt')
print (mydataset.shape)
mydataset = mydataset.sort_values(by=['Model','timestamp']) #sort
mydataset['dist'] =
np.concatenate(mydataset.groupby(["Model"]).apply(lambda
x: haversine(x['Latitude'],x['Longitude'],
x['Latitude'].shift(),x['Longitude'].shift())).values)
有了这个,我可以根据模型(通过使用排序)计算行之间的距离。
但我想更进一步,根据模式和模型进行计算。我的字段是“索引、模型、模式、纬度、经度、时间戳”
请指教!
Index, Model, Timestamp, Long, Lat, Mode(denote as 0 or 2), Distance Calculated
1, X, 2018-01-18 09:16:37.070, 103.87772815, 1.35653496, 0, 0.0
2, X, 2018-01-18 09:16:39.071, 103.87772815, 1.35653496, 0, 0.0
3, X, 2018-01-18 09:16:41.071, 103.87772815, 1.35653496, 0, 0.0
4, X, 2018-01-18-09:16:43.071, 103.87772052, 1.35653496, 0, 0.0008481795
5, X, 2018-01-18 09:16:45.071, 103.87770526, 1.35653329, 0, 0.0017064925312804799
6, X, 2018-01-18 09:16:51.070, 103.87770526, 1.35653329, 2, 0.0
7, X, 2018-01-18 09:16:53.071, 103.87770526, 1.35653329, 2, 0.0
8, X, 2018-01-18 09:59:55.072, 103.87770526, 1.35652828, 0, 0.0005570865824842293
我需要它来计算模型的总行程距离以及模型在任何模式下的总行程距离
【问题讨论】:
-
我尝试编辑我的 groupby(["Model","Mode"]) 但它不起作用。有人可以帮我解决这个问题吗?
-
你能添加一些数据样本吗? 5、6 行。
-
不看你的数据就很难评论,为什么不能对Mode分别groupby然后连接?
-
您好,已更新数据,由于机密信息,我只能显示这些。我已经根据stackoverflow上的其他一些帖子完成了这项工作。由于我还是 python 新手,如果您能够解释所使用的术语,将不胜感激。给您带来的不便,敬请见谅
-
@ThanksForHelping 你需要两个新的距离列,第一个是 Mode 的距离,第二个是 Model 的距离?
标签: python pandas dataframe distance spyder