gpt4 book ai didi

python - Pandas 和 GeoPandas 索引和切片

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:30 26 4
gpt4 key购买 nike

我正在使用 GeoPandas 和 Pandas。我有一个 300,000 行数据框 df,其中有 4 列 + 索引列。

        id      lat         lon     geometry
0 2009 40.711174 -73.99682 0
1 536 40.741444 -73.97536 0
2 228 40.754601 -73.97187 0

但是唯一 ID 很少(~200)

我想为每个 (lat,lon) 组合生成一个 shapely.geometry.point.Point 对象,类似于此处所示:http://nbviewer.ipython.org/gist/kjordahl/7129098(见单元格#5),它循环遍历数据帧的所有行;但是对于这么大的数据集,我想将循环限制在更少的唯一 ID 上。

因此,对于给定的 id 值,idvalue(即从第一行开始的 2009)创建 GeoSeries,并将其直接分配给具有 id==idvalue 的所有行

我的代码如下:

    for count, iunique in enumerate(df.if.unique()):
sc_start = GeoSeries([Point(np.array(df[df.if==iunique].lon)[0],np.array(df[df.if==iunique].lat)[0])])
df.loc[iunique,['geometry']] = sc_start

但是事情不起作用——几何字段没有改变——我认为是因为 sc_start 的索引与 df 的索引不匹配。

我该如何解决这个问题?我应该坚持整个 df 的循环吗?

最佳答案

我会采取以下方法:

  1. 首先找到唯一的 ID 并为此创建一个 GeoSeries of Points:

    unique_ids = df.groupby('id', as_index=False).first()
    unique_ids['geometry'] = GeoSeries([Point(x, y) for x, y in zip(unique_ids['lon'], unique_ids['lat'])])
  2. 然后在匹配的 id 上将这些几何图形与原始数据框合并:

    df.merge(unique_ids[['id', 'geometry']], how='left', on='id')

关于python - Pandas 和 GeoPandas 索引和切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30689063/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com