Фильтрация фреймов данных по нескольким параметрам одновременно - PullRequest
0 голосов
/ 26 февраля 2019

Допустим, у меня есть фрейм данных:

df = pd.DataFrame({"a": range(1,5), "b": range(6, 10), "c": range(11, 15) , "d": range(15, 19)})

Я хочу отфильтровать этот фрейм данных на основе значений двух столбцов, составляющих координатные точки.Скажем, c, d - координаты x и y соответственно.Тем не менее, я хочу проверить, если дан список точек во фрейме данных, какие точки находятся в пределах значений списка координат x и списка координат y.

x_coord = [4,12,13,17,19]
y_coord = [16,18,25,29,32]

Используя функцию pandas "isin", как я могу одновременно проанализировать оба столбца c и d фрейма данных и сравнить их со значениями в списке?(Я хочу использовать этот метод анализа для больших фреймов данных)

Требуемый вывод: фрейм данных, содержащий всю строку исходного фрейма данных, который имеет оба значения c & d, которые находятся в обоих x & yсписки.

1 Ответ

0 голосов
/ 26 февраля 2019

Вы можете сделать это, создав новый столбец в виде кортежа двух других и используя isin в этом столбце следующим образом:

In[0]: df['coords'] = list(zip(df['c'], df['d']))
     : df[df['coords'].isin(zip(x_coord, y_coord))]

Out[0]:    
a  b   c   d     e
0  1  6  11  15  NaN
1  2  7  12  16  NaN
2  3  8  13  17  NaN
3  4  9  14  18  NaN

Или вы можете создать новый кадр данных с вашими координатами ииспользуйте метод inner_join, чтобы получить только соответствующие строки.

In[0]: df = pd.DataFrame({"a": range(1,5), "b": range(6, 10), "c": range(11, 15) , "d": range(15, 19), "e": np.nan})

     : x_coord = range(11, 15) 
     : y_coord = range(15, 19) 

     : coords = pd.DataFrame(list(zip(x_coord, y_coord)), columns=['c', 'd'])
     : df.merge(coords, on=['c', 'd'], how='inner')

Out[0]:    
    a  b   c   d     e
    0  1  6  11  15  NaN
    1  2  7  12  16  NaN
    2  3  8  13  17  NaN
    3  4  9  14  18  NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...