根据for循环向新列添加True或False

时间:2018-11-21 12:31:09

标签: python python-3.x pandas

我有一个已命名多边形的列表:

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循环,以查看哪个点落在哪个多边形内,然后将名称和ID返回到列表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]) 

现在我要尝试做的是更改循环,以便将其添加到称为“内部”的点数据帧中,如果该点在多边形中则返回“ 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 :(得分:1)

您正在尝试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')

这对我有用...

希望这对您有所帮助!