迭代Pandas索引对[0,1],[1,2][2,3]

2024-04-25 22:02:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由gps设备创建的pandas lat/lng数据帧。在

我的问题是如何生成一个距离列的距离之间的gps轨道线。在

一些google给了我haversine方法,该方法使用使用iloc选择的单个值,但我在如何迭代方法输入的数据帧上苦苦挣扎。在

我以为我可以运行一个for循环,用一些

for i in len(df):
    df['dist'] = haversine(df['lng'].iloc[i],df['lat'].iloc[i],df['lng'].iloc[i+1],df['lat'].iloc[i+1]))

但是我得到了错误TypeError: 'int' object is not iterable。我也在考虑df.apply,但我不确定如何获得适当的输入。任何帮助或提示。关于如何做到这一点将不胜感激。在

样品DF

^{pr2}$

方法

def haversine(lon1, lat1, lon2, lat2):
    """
    Calculate the great circle distance between two points 
    on the earth (specified in decimal degrees)
    """
    # convert decimal degrees to radians 
    lon1, lat1, lon2, lat2 = map(math.radians, [lon1, lat1, lon2, lat2])
    # haversine formula 
    dlon = lon2 - lon1 
    dlat = lat2 - lat1 
    a = math.sin(dlat/2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon/2)**2
    c = 2 * math.asin(math.sqrt(a)) 
    km = 6367 * c
    return km

Tags: 数据方法距离dfformathgpslng
2条回答

你在找这样的结果吗?在

       lat        lon  dist2next
0 -7.11873  113.72512   0.013232
1 -7.11873  113.72500   0.026464
2 -7.11873  113.72476   0.020951
3 -7.11873  113.72457   0.014335
4 -7.11873  113.72444        NaN

可能有个聪明的方法熊猫。滚动应用... 但为了快速解决问题,我会这么做。在

^{pr2}$

或者,如果您不想这样修改haversine函数,您可以使用东风九号[我,'龙'],东风九号[我,'拉特'],东风九号[i+1,'lon]等

我会建议使用一个更快的变化循环通过一个df这样的has

df_shift = df.shift(1)
df = df.join(df_shift, l_suffix="lag_")
log = []

for rows in df.itertuples():
     log.append(haversine(rows.lng ,rows.lat, rows.lag_lng, rows.lag_lat))

pd.DataFrame(log)

相关问题 更多 >