我使用了great_circle函数来查找两个坐标之间的距离。例如,如果我有以下数据:
{ "_id" : ObjectId("58edf28c73fed29f4b741731"), "minItem" : { "item_id" : 3, "item_field" : 3 } }
{ "_id" : ObjectId("58edec3373fed29f4b741730"), "minItem" : { "item_id" : 3, "item_field" : 3 } }
为了找到距离我使用以下代码:
lat1= ['-77.85']
lon1= ['80.23']
lat2= [-22.4532']
lon2= ['62.45']
从远处找到时间,我们知道时间=距离/速度。 我假设速度为80公里/小时,我使用:
import pandas as pd
from geopy.distance import great_circle
from datetime import datetime,timedelta as dt
distance = df.apply(lambda x: great_circle((x['lat1'], x['lon1']),(x['lat2'], x['lon2'])), axis = 1) # gives distance in km
获得的'时间'单位为'km'。我想将此功能转换为时间。
time= distance/80
我收到以下错误:
df['time'] = pd.to_timedelta(time,unit='h')
你能告诉我如何获得'时间'作为时间函数而不是距离'km'吗?
答案 0 :(得分:0)
您需要确保时间正确格式化,并且永远不要输入浮点数。
您可以使用以下命令将float转换为分钟和小时:
# time = distance / speed
time = 2.75 # 2 hours + 45 minutes
result = '0 days {0:02.0f}:{1:02.0f}:00'.format(*divmod(time * 60, 60)).split(":")
# => result = "0 days 02:45:00"
df['time'] = pd.to_timedelta(result) #now it should work
答案 1 :(得分:0)
考虑使用.km
属性。
演示:
In [33]: df
Out[33]:
lat1 lon1 lat2 lon2
0 -77.85 80.23 -22.4532 62.45
In [34]: distance = x.apply(lambda x: great_circle((x['lat1'], x['lon1']),
(x['lat2'], x['lon2'])).km,
axis = 1)
# ----> ^^^
In [35]: distance
Out[35]:
0 6233.235674
dtype: float64
In [36]: df['time'] = pd.to_timedelta(distance/80,unit='h')
In [37]: df
Out[37]:
lat1 lon1 lat2 lon2 time
0 -77.85 80.23 -22.4532 62.45 3 days 05:54:55.605600