循环遍历列表中的变量,并将变量名指定为列表中的字符串列名

2024-10-03 06:25:06 发布

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

每个x_多边形表示一个多边形,包含一组坐标

polys = [gangnam_poly, mapo_poly, jamsil_poly, sungsoo_poly, pangyo_poly]

我有我想要找到它所属位置的坐标,也就是说,它是否在一个多边形内

我有一个数据框,看起来像:

    id  title       count   pt
0   1   place1      1864    POINT (167.036077 31.490958)
1   2   place2      6466    POINT (147.03103 33.491231)
2   3   place3      4652    POINT (117.030428 37.4925)

Assign variable names and data in a loop之后 方法,如果为了简单起见,我在字典而不是数据帧上执行此操作:

polys = [gangnam_poly, mapo_poly, jamsil_poly, sungsoo_poly, pangyo_poly]
data={}
for p in polys:
    data[str(p)] = 1
print(data)

输出:

{'POLYGON ((127.03302 37.53461, 127.05259 37.52834, 127.06658 37.52084, 127.0752 37.49484, 127.06503 37.49213, 127.02748 37.46701, 127.00611 37.49668, 127.01534 37.50047, 127.01405 37.51698, 127.0186 37.52776, 127.02375 37.53109, 127.03302 37.53461))': 1,
 'POLYGON ((126.87833 37.5917, 126.93772 37.5823, 126.95755 37.57426, 126.93554 37.54098, 126.91026 37.54288, 126.844 37.58539, 126.87833 37.5917))': 1

我想使用它的名称,而不是存储在其中的多边形。所以

所需输出: {江南保利:1、马波保利:1等}

编辑:我的解决方案: 我已经通过创建另一个带有名字的列表来做到这一点,随着列表变得越来越长,这将变得单调乏味,因此必须有更有效的方法。在那之前,我一直在做这件事

polys = [gangnam_poly, mapo_poly, jamsil_poly, sungsoo_poly, pangyo_poly]
names = ["gangnam", "mapo", "jamsil", "sungsoo", "pangyo"]

for polygon,n in zip(polys, names):
    nodes_df[n] = nodes_df.pt.apply(lambda p: polygon.intersects(p))

Tags: 数据方法inptdatanames多边形point