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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seit
0.17.0
es gibt eine neueindicator
param übergeben werden könnenmerge
die wird Ihnen sagen, ob die Zeilen, nur in linken, rechten oder beide:So kann man nun filtern Sie die zusammengeführte df durch die Auswahl von nur
'left_only'
Zeilendf.merge(other, how='left', indicator=True).query('_merge == "left_only"')
aber weiß nicht, ob das nicht besser.Ich persönlich finde zu viel chaining für die sake-Herstellung ein Einzeiler machen kann der code schwieriger zu Lesen, kann es einige speed-und Speicher-Verbesserungen, obwohl
um wieder zum ursprünglichen Links in einer Zeile:
df.merge(other, how='left', indicator=True).query('_merge == "left_only"').drop(['_merge'],axis=1)
InformationsquelleAutor EdChum
Interessante
Gibt:
Scheint ein wenig eleganter...
difference
, um das gleiche Ergebnis zu erzielenInformationsquelleAutor greg_data