2
我正在使用GeoPandas和Pandas。 我有一個300,000行的Dataframe,df,有4列+索引列。熊貓和GeoPandas索引和切片
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的循環?
這似乎更優雅,我做了什麼。你可以 – claire
這似乎更加優雅,我做了什麼! 在我原來的問題中,我簡化了df數據框。實際上它有10列,但我只需要將三個複製到unique_ids(id,lon,lat)。我可以通過groupby選擇只有三個字段從DF到unique_ids嗎? (抱歉的雙重評論) – claire
你可以做,例如'df [['id','lon','lat']]。groupby('id'...' – joris