擅长:python、mysql、java
<p>我无法让<code>vincenty</code>工作,显然它已被<code>geodesic</code>取代。但这应该是可行的:</p>
<pre><code>from geopy.distance import geodesic
df = pd.DataFrame({
'id': [1,1,1,2,2],
'lat': [41.144540, 41.144540, 41.163172, 41.163233, 41.163198],
'lon': [-8.562926, -8.562926, -8.583821, -8.583838, -8.583886 ]
})
res = (df.groupby(by='id').agg(start_lat=pd.NamedAgg(column='lat', aggfunc='first'),
start_long=pd.NamedAgg(column='lon', aggfunc='first'),
end_lat = pd.NamedAgg(column='lat', aggfunc='last'),
end_long=pd.NamedAgg(column='lon', aggfunc='last'))
.apply(lambda f: geodesic((f['start_lat'], f['start_long']), (f['end_lat'], f['end_long'])), axis=1)
.reset_index()
)
df = df.merge(res, on='id').rename(columns={0: 'dist'})
print(df)
</code></pre>