基于for循环向新列添加True或False

2024-04-26 13:51:49 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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]) 

现在我要尝试做的是改变循环,这样它会向points数据框添加一个名为'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'


Tags: nameiniddf列表for多边形loc
1条回答
网友
1楼 · 发布于 2024-04-26 13:51:49

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

这对我有用。。。你知道吗

希望这对你有帮助!你知道吗

相关问题 更多 >