Как я могу присоединиться к pandas фрейму данных с гео pandas, используя ближайшие значения в поле - PullRequest
0 голосов
/ 17 марта 2020

У меня есть фрейм данных геоподдана, в котором есть столбец «значения». У меня есть pandas dataframe, который также имеет столбец с именем "values" Значения colomn в двух фреймах данных не совсем одинаковы; Я хотел бы объединить их на основе ближайших значений для фрейма данных геогнада.

Вот минимальный пример того, чего я намерен достичь, у меня есть фрейм данных геопадана со столбцом «значения»:

   S_1_OBJECT    values  OBJECTID  Shape_Leng  Shape_Area  \
0      3541.0  325.5626         1    0.020833    0.000017   
1      3544.0  314.5491         2    0.029167    0.000026   
2      3545.0  551.1674         3    0.035000    0.000034   

                                            geometry  
0  POLYGON ((-115.6041666669581 50.96666666593393...  
1  (POLYGON ((-115.6 50.96666666593393, -115.6 50...  
2  (POLYGON ((-115.6 50.96249999897583, -115.6 50... 

У меня также есть фрейм данных pandas, в котором есть столбец значений, например:

     values  color  
0    300.00  green     
1    500.00   blue    

в конце концов, я хотел бы иметь фрейм данных geo pandas как таковой которые связывают цветовой столбец с ближайшими значениями из фрейма данных geo pandas:

   S_1_OBJECT    values  OBJECTID  Shape_Leng  Shape_Area  color\
0      3541.0  325.5626         1    0.020833    0.000017  green 
1      3544.0  314.5491         2    0.029167    0.000026  green
2      3545.0  551.1674         3    0.035000    0.000034   blue

                                            geometry  
0  POLYGON ((-115.6041666669581 50.96666666593393...  
1  (POLYGON ((-115.6 50.96666666593393, -115.6 50...  
2  (POLYGON ((-115.6 50.96249999897583, -115.6 50... 

Я проверил слияние для pandas, но, похоже, функциональность как таковая отсутствует. Я также попытался:

shp_out = pandas.merge_asof(geopandasdataframe, pandasdataframe, on='values', direction='nearest')

, но позже я не могу преобразовать shp_out в json строку, используя shp_out.to_ json ()

1 Ответ

0 голосов
/ 18 марта 2020

Проблема исходит от pandas.merge_asof сделано на geopadnas.GeoDataFrame. Это работает, но в получающемся GeoDataFrame нет назначенной геометрии, которая затем ломается .to_json(). Вы можете просто исправить это, указав столбец геометрии после merge_asof.

shp_out = shp_out.set_geometry('geometry')

Тогда вы сможете получить гео json через shp_out.to_json().

РЕДАКТИРОВАТЬ: он также теряет CRS, поэтому я бы рекомендовал установить его обратно.

shp_out.crs = geopandasdataframe.crs
...