【问题标题】:Find points in cells through pandas dataframes of coordinates通过坐标的熊猫数据框查找单元格中的点
【发布时间】:2015-02-12 09:20:17
【问题描述】:

在给定点坐标和单元格边界坐标的情况下,我必须通过两个 pandas 数据框找出哪些点位于方形单元格网格内。 我正在调用 dfc 包含代码和单元格边界坐标的数据框(我简化了问题,在实际分析中,我有一个带有地理点和大量要检查的点的大网格):

Code,minx,miny,maxx,maxy
01,0.0,0.0,2.0,2.0
02,2.0,2.0,3.0,3.0

dfp 包含 Id 和点坐标的数据框:

Id,x,y
0,1.5,1.5
1,1.1,1.1
2,2.2,2.2
3,1.3,1.3
4,3.4,1.4
5,2.0,1.5

现在我想执行一个搜索,在 dfc 数据帧中返回一个新列(称为“GridCode”),该列是该点所在的网格。单元格应该是完全平方的,所以我想通过以下方式进行分析:

a = np.where(
            (dfp['x'] > dfc['minx']) &
            (dfp['x'] < dfc['maxx']) &
            (dfp['y'] > dfc['miny']) &
            (dfp['y'] < dfc['maxy']),
            r2['Code'],
            'na')

避免数据帧上的多个循环。数据帧的长度不一样。生成的数据框应如下所示:

   Id    x    y GridCode
0   0  1.5  1.5   01
1   1  1.1  1.1   01
2   2  2.2  2.2   02
3   3  1.3  1.3   01
4   4  3.4  1.4   na
5   5  2.0  1.5   na

提前感谢您的帮助!

【问题讨论】:

    标签: python pandas dataframe points spatial-query


    【解决方案1】:

    可能是一个更好的方法,但因为这已经有一段时间了..

    使用 Pandas 布尔索引过滤 dfc 数据帧而不是 np.where()

    def findGrid(dfp):  
        c = dfc[(dfp['x'] > dfc['minx']) &
                (dfp['x'] < dfc['maxx']) &
                (dfp['y'] > dfc['miny']) &
                (dfp['y'] < dfc['maxy'])].Code
    
        if len(c) == 0:        
            return None
        else:        
            return c.iat[0]
    

    然后使用 pandas 的 apply() 函数

    dfp['GridCode'] = dfp.apply(findGrid,axis=1)
    

    会产生这个

        Id  x   y   GridCode
    0   0   1.5 1.5 1
    1   1   1.1 1.1 1
    2   2   2.2 2.2 2
    3   3   1.3 1.3 1
    4   4   3.4 1.4 NaN
    5   5   2.0 1.5 NaN
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 2020-09-15
      • 1970-01-01
      • 2018-01-24
      相关资源
      最近更新 更多