2

GeoPandas と Pandas を使用しています。たとえば、4 列 + インデックス列の 300,000 行のデータフレーム df があります。

        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)

ここに示すものと同様に、各 (緯度、経度) の組み合わせに対して shapely.geometry.point.Point オブジェクトを生成したい: http://nbviewer.ipython.org/gist/kjordahl/7129098 (cell#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 全体を通してループに固執する必要がありますか?

4

1 に答える 1