2015-12-22 1 views
8

Ich habe zwei separate Pandas Datenrahmen (df1 und df2), die mehrere Spalten haben, aber nur eine gemeinsame ('Text').Pandas vergleichen zwei Datenfelder und entfernen, was in einer Spalte übereinstimmt

Ich würde gerne jede Zeile in df2, die keine Übereinstimmung in einer der Zeilen der Spalte, die df2 und df1 gemeinsam haben.

df1

A B text 
45 2 score 
33 5 miss 
20 1 score 

df2

C D text 
.5 2 shot 
.3 2 shot 
.3 1 miss 

Ergebnis df (entfernen Zeile mit verpassen, da es in df1 auftritt)

C D text 
.5 2 shot 
.3 2 shot 

Ist es möglich, die isin Methode, dies zu verwenden Szenario?

Antwort

8

Wie Sie gefragt haben, können Sie dies effizient mit isin tun (ohne auf teure merge s zurückgreifen).

>>> df2[~df2.text.isin(df1.text.values)] 
C D text 
0 0.5 2 shot 
1 0.3 2 shot 
+0

Dies ist, was in den Sinn kam nur den Titel zu lesen –

1

EDIT:

import numpy as np 

mergeddf = pd.merge(df2,df1, how="left") 

result = mergeddf[(np.isnan(mergeddf['A']))][['C','D','text']] 
1

Sie können sie verschmelzen und nur die Linien halten, die ein NaN haben.

df2[pd.merge(df1, df2, how='outer').isnull().any(axis=1)] 

oder können Sie verwenden isin:

df2[~df2.text.isin(df1.text)] 
Verwandte Themen