Pandas: Zeilen Suchen, die nicht existieren in anderen DataFrame nach mehreren Spalten

gleiche wie diese python pandas: wie findet Zeilen in einem dataframe in einem anderen aber nicht?
aber mit mehreren Spalten

Dies ist das setup:

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']
))

Jetzt, ich möchten, wählen Sie die Zeilen aus df die nicht existieren in anderen. Ich will die Auswahl von col1 und col2

In SQL würde ich das tun:

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

Und in Pandas kann ich tun so etwas wie dieses, aber es fühlt sich sehr hässlich. Teil der Hässlichkeit könnten vermieden werden, wenn df hatte-id-Spalte, aber es ist nicht immer verfügbar.

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)

Also vielleicht gibt es eine elegantere Möglichkeit?

InformationsquelleAutor Pekka | 2015-09-18

Schreibe einen Kommentar