微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决添加一个类别变量,为每条街道 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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。