【发布时间】:2019-12-26 15:22:40
【问题描述】:
我有两个数据框。一个包含一列多边形,取自多边形形状的图像。每个多边形都有一组坐标。这个数据框还有一个“segment-id”列。我有另一个数据框,其中包含一列点,也带有坐标。这些点表示来自同一多边形形状图像的像素,因此具有相同的坐标系。我想给每个点包含它的多边形的“segment-id”。每个多边形至少包含一个点。
目前,我通过使用嵌套的 for 循环来实现这一点:
for i, row in enumerate(point_df.itertuples(), 0):
point = pixel_df.at[i, 'geometry']
for j in range(len(polygon_df)):
polygon = polygon_df.iat[j, 0]
if polygon.contains(point):
pixel_df.at[i, 'segment_id'] = polygon_df.at[j, 'segment_id']
else:
pass
这非常慢。对于 100 点,大约需要 10 秒。我需要一种更快的方法来做到这一点。我尝试过使用 apply 但它仍然非常慢。
希望有人能帮帮我,非常感谢。
【问题讨论】:
-
能否贴出慢速部分的反汇编或指令跟踪(
poly.contains(point))? -
我认为 for 循环是缓慢的部分。但是我现在就试试这个,我没有太多使用调试工具的经验
标签: pandas performance dataframe polygon contains