Pandas: найдите строки, которые не существуют в другом DataFrame несколькими столбцами

то же самое, что и python python: как найти строки в одном фрейме данных, но не в другом? но с несколькими столбцами

Это настройка:

import pandas as pd df = pd.DataFrame(dict( col1=[0,1,1,2], col2=['a','b','c','b'], extra_col=['this','is','just','something'] )) other = pd.DataFrame(dict( col1=[1,2], col2=['b','c'] )) 

Теперь я хочу выбрать строки из df которых нет в других. Я хочу сделать выбор по col1 и col2

В SQL я бы сделал:

 select * from df where not exists ( select * from other o where df.col1 = o.col1 and df.col2 = o.col2 ) 

И в Пандах я могу сделать что-то подобное, но это кажется очень уродливым. Часть уродства можно было бы избежать, если бы у df был id-column, но он не всегда доступен.

 key_col = ['col1','col2'] df_with_idx = df.reset_index() common = pd.merge(df_with_idx,other,on=key_col)['index'] mask = df_with_idx['index'].isin(common) desired_result = df_with_idx[~mask].drop('index',axis=1) 

Так может быть, есть еще более элегантный способ?

2 Solutions collect form web for “Pandas: найдите строки, которые не существуют в другом DataFrame несколькими столбцами”

Начиная с 0.17.0 есть новый параметр indicator вы можете передать в merge который скажет вам, есть ли строки только в левом, правом или обоих:

 In [5]: merged = df.merge(other, how='left', indicator=True) merged Out[5]: col1 col2 extra_col _merge 0 0 a this left_only 1 1 b is both 2 1 c just left_only 3 2 b something left_only In [6]: merged[merged['_merge']=='left_only'] Out[6]: col1 col2 extra_col _merge 0 0 a this left_only 2 1 c just left_only 3 2 b something left_only 

Таким образом, теперь вы можете фильтровать объединенный df, выбирая только строки 'left_only'

Интересно

 cols = ['col1','col2'] #get copies where the indeces are the columns of interest df2 = df.set_index(cols) other2 = other.set_index(cols) #Look for index overlap, ~ df[~df2.index.isin(other2.index)] 

Возвращает:

  col1 col2 extra_col 0 0 a this 2 1 c just 3 2 b something 

Кажется немного более элегантным …

 
Interesting Posts for Van-Lav

Django и параллельная обработка:

Вступление с предложениями

Почему с Django не документирована ручная интеграция с Django?

MiniBatchKMeans дает различные центроиды после последующих итераций

Показывать индикатор выполнения для каждой эпохи во время периодического обучения в Keras

Gtk + 3 Gdk Pixbuf.new_from_data дает ошибку «Ошибка сегментации (сбрасывание ядра)» 139

В Python, как я могу рисовать на пиксель на экране напрямую?

XMODEM для python

Как отправить строку, не связанную с английским юникодом, с помощью HTTP-заголовка?

Python – как запросить страницы с сайта, использующего OpenID

Пакет Python GDAL отсутствует в файле заголовка при установке через pip

map_async vs apply_async: что я должен использовать в этом случае?

Версии статических файлов django

Получение WebViewLinks с помощью Google Диска

Необходимо присоединиться к элементам списка, но сохранить элемент «вокруг» после присоединения

Python - лучший язык программирования в мире.