Я использую GeoPandas и Pandas. У меня есть, скажем, 300 000 строк Dataframe, df, с 4 столбцами + индексный столбец.Индексирование и нарезка Pandas и 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
однако уникальные идентификаторы лишь несколько (~ 200)
Я хочу, чтобы создать объект shapely.geometry.point.Point для каждого (широта, долгота) комбинации, подобно тому, как показано здесь : http://nbviewer.ipython.org/gist/kjordahl/7129098 (см. Ячейку # 5), , где он проходит через все строки данных; но для такого большого набора данных я хотел бы ограничить цикл гораздо меньшим количеством уникальных идентификаторов.
Таким образом, для заданного значения идентификатора, idvalue (т.е. 2009 из первого ряда) создать GeoSeries, и назначить его непосредственно ко всем строкам, которые имеют идентификатор == 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 dataframe. На самом деле он имеет 10 столбцов, но мне нужно скопировать только три в unique_ids (id, lon, lat). могу ли я выбрать только три поля из df в unique_ids через groupby? (извините за двойной комментарий) – claire
вы можете сделать, например, 'df [['id', 'lon', 'lat']]. groupby ('id' ...' – joris