添加一个类别变量,为每条街道 10m 的每个段提供唯一的 id

问题描述

我有一个很大的 csv,其中包含 1 秒间隔内每个点的行程数据信息:lon、lat、timestamp 和 street_id。 我的目标是将街道分割为 10m 长的路段,并根据每个点的位置为每个点分配一个唯一的路段 ID。

以下是使用 df.head() 显示我的数据的示例:

    timestamp           Lat       Lon       street_id
0   4/1/2014 0:11:00    40.7690   -73.9549  140
1   4/1/2014 0:17:00    40.7267   -74.0345  50

我正在使用 goepandas 来获取空间数据框:

from geopandas import GeoDataFrame
from shapely.geometry import Point

geometry = [Point(xy) for xy in zip(df.Lon,df.Lat)]
df = df.drop(['Lon','Lat'],axis=1)
gdf = GeoDataFrame(df,crs="epsg:4326",geometry=geometry)

我只是不知道如何开始,我知道我必须按 street_id 分组然后计算每个点与街道起点之间的距离,但我找不到如何找到如何这样做

预期结果应如下所示:

    timestamp           Lat       Lon       street_id segment_id
0   4/1/2014 0:11:00    40.7690   -73.9549  140          5
1   4/1/2014 0:17:00    40.7267   -74.0345  50           1

Segment_id 应该是每个 10m 长街道段的唯一标识符

解决方法

10m 分辨率对应于纬度或经度的第 4 位数字的变化。因此,您甚至不必按 street_id 对点进行分组,只需为元组的所有不同组合(纬度、经度)分配唯一 id:

zz = df[['Lat','Lon']].value_counts()
lut = {k:ix for ix,k in enumerate(zz.index.values)}
df['segment_id'] = df.apply(lambda xx: lut[(xx['Lat'],xx['Lon'])],axis=1)