Подмножество на основе двух списков и в пределах значений - PullRequest
0 голосов
/ 12 марта 2019

У меня есть два длинных списка (n = 100 000) координат x и y, и я хочу разместить все к востоку от границ (черные точки).Тем не менее, границы не являются однородными (подумайте береговые линии).Как я могу установить (удалить) подмножество на основе координат x и y двух списков и в пределах значений?

Пример

import pandas as pd

dat = pd.DataFrame({'x': [1, 1, 1, 4, 4, 5, 1.5, 2, 2.5, 2.5], 'y': [12, 13, 14, 12, 14, 13, 10, 11.5, 13, 11]})
setx = [1, 1.5, 2, 2, 2, 1.5, 1]
sety = [11, 11.5, 12, 13, 14, 14.5, 15]

На рисунке нижеЯ хочу удалить все наблюдения синей точки за пределами черных точек (границ).Как я могу сделать это, используя условные состояния, в которых каждый элемент sety и setx сравнивается, чтобы убедиться, что он находится на востоке от границ?

График

plt.scatter(dat['x'], dat['y'], alpha=0.5, data = dat)
plt.scatter(setx, sety, alpha=0.5, data = dat, color = 'black')
plt.show()

enter image description here

edit

Прости мою неопределенность.Я пытался очистить формулировку.Главный вопрос - как убрать все наблюдения к востоку от границы с черной точкой?Я не уверен, как включить парный список.

1 Ответ

1 голос
/ 12 марта 2019

IIUC, что вы можете сделать, это использовать стройную библиотеку, которая предоставляет группу естественного языка отношения между геометрическими объектами (содержит, пересекается и т. Д.)

Здесь возможный подход:

from shapely.geometry import Polygon, Point

# Create the filtering area (a polygon)
poly = Polygon(zip(setx, sety))

# Create a column converting your coordinates in point objects
dat['point'] = dat.apply(lambda x: Point(x.x, x.y), axis=1).values

# Apply the above mentioned method to get the index of the points within the filtering polygon
indices_within_region = dat['point'].apply(lambda x: poly.intersects(x)).values

# Subset your df
dat[indices_within_region]

# Result
     x       y      point
0   1.0     12.0    POINT (1 12)
1   1.0     13.0    POINT (1 13)
2   1.0     14.0    POINT (1 14)
...