Добавление True или False в новый столбец на основе цикла for - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть список именованных полигонов:

import pandas as pd
import geopandas as gp
df = gp.GeoDataFrame([['a',Polygon([(1, 0), (1, 1), (2,2), (1,2)])],
                     ['b',Polygon([(1, 1), (2,2), (3,1)])]],
                     columns = ['name','geometry'])
df = gp.GeoDataFrame(df, geometry = 'geometry')

и список именованных точек:

points = gp.GeoDataFrame( [['box', Point(1.5, 1.75)],
                          ['cone', Point(3.0,2.0)],
                        ['triangle', Point(2.5,1.25)]],
                     columns=['id', 'geometry'], 
                     geometry='geometry')

В настоящее время я запускаю цикл for для этих точек и полигонов, чтобыпосмотрим, какая точка попадает в какой полигон и возвращает туда имена и идентификаторы в список loc примерно так:

loc = []

for geo1, name in zip(df['geometry'], df['name']):
    for geo2, id in zip(points['geometry'], points['id']):
        if geo1.contains(geo2):
            loc.append([id, name]) 

Теперь я хочу попробовать и изменить цикл, чтобы он добавил столбец куказывает на датафрейм с именем «inside» и возвращает «True», если точка находится в многоугольнике, и «False», если это не так.

Я пробовал:

points['inside'] = ''
for geo1 in df['geometry']:
    for geo2 in points['geometry']:
        if geo1.contains(geo2):
            points['inside'].append('True')

, но этоне работает

Как мне лучше всего это сделать?

извините, если есть очень простой ответ, который я пропустил.

Ниже предложено, что это может бытьдубликат другого вопроса, однако тот, который связан, не относится к добавлению результатов в столбец, и хотя методология Matplotlib может быть быстрее, когда я запускаю пример сценария при условии, что я получаю ошибку float() argument must be a string or a number, not 'zip'

1 Ответ

0 голосов
/ 21 ноября 2018

Вы пытаетесь append в строку ...

Просто измените строку points['inside'] = '' на points['inside'] = []

points['inside'] = []
for geo1 in df['geometry']:
    for geo2 in points['geometry']:
        if geo1.contains(geo2):
            points['inside'].append('True')

Это работает для меня ...

Надеюсь, вы найдете это полезным!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...