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 全体を通してループに固執する必要がありますか?