Encuentra puntos en las celdas a través de pandas de datos de coordenadas

Tengo que encontrar qué puntos están dentro de una cuadrícula de celdas cuadradas, dadas las coordenadas de los puntos y las coordenadas de los límites de las celdas, a través de dos marcos de datos de pandas. Llamo a dfc el dataframe que contiene el código y las coordenadas de los límites de las celdas (simplifico el problema, en el análisis real tengo una cuadrícula grande con puntos geográficos y toneladas de puntos para verificar):

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

y dfp el dataframe que contiene una identificación y las coordenadas de los puntos:

 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 

Ahora me gustaría realizar una búsqueda que devuelva en dfc dataframe una nueva columna (llamada ‘GridCode’) de la cuadrícula en la que se encuentra el punto. Las celdas deben estar perfectamente cuadradas, por lo que me gustaría realizar un análisis a través de:

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

Evitando varios bucles en los marcos de datos. Las longitudes de los marcos de datos no son las mismas. El dataframe resultante debe ser el siguiente:

  Id xy 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 

¡Gracias de antemano por tu ayuda!

    Probablemente sea una mejor manera, pero ya que esto ha estado ahí por un tiempo …

    Uso de la indexación booleana de Pandas para filtrar el dataframe dfc en lugar de 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] 

    Luego usa la función pandas apply ()

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

    Cederá esto

      Id xy 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