2017-03-19 4 views
2

Ich habe eine Pandas DataFrame bestehend aus zwei Spalten von Strings. Ich möchte eine dritte Spalte erstellen, die die Bearbeitungsdistanz der beiden Spalten enthält.Edit Abstand zwischen zwei Pandas Spalten

from nltk.metrics import edit_distance  
df['edit'] = edit_distance(df['column1'], df['column2']) 

Aus irgendeinem Grund, dies zu einer Art Endlosschleife im Sinne zu gehen scheint, dass es schon seit geraumer Zeit nicht reagiert und dann muss ich es manuell beenden.

Alle Vorschläge sind willkommen.

+0

http://pandas.pydata.org/pandas-docs/stable/generated /pandas.DataFrame.apply.html – alvas

Antwort

6

Die Funktion edit_distance von nltk dient zum Vergleichen von Stringpaaren. Wenn Sie die Edit-Distanz zwischen den entsprechenden Paaren von Zeichenketten zu berechnen, apply es separat zu jeder Saiten der Zeile wie folgt aus:

results = df.apply(lambda x: edit_distance(x["column1"], x["column2"]), axis=1) 

Oder wie folgt aus (wahrscheinlich ein wenig effizienter), um zu verhindern, einschließlich der irrelevante Spalten der Datenrahmen:

results = df.loc[:, ["column1", "column2"]].apply(lambda x: edit_distance(*x), axis=1) 

um die Ergebnisse zu Ihrem Datenrahmen hinzufügen, würden Sie es wie folgt verwendet werden:

df["distance"] = df.loc[:, ["column1","column2"]].apply(lambda x: edit_distance(*x), axis=1) 
+0

Ich nehme an, das würde funktionieren, aber der DataFrame hat mehr als 2 Spalten. Ich interessiere mich nur für die Bearbeitungsentfernung von zwei von ihnen, so dass dieser Code fehlschlägt. Kann ich einen anderen Wert für "Achse" als 0 und 1 angeben, d. H., Kann ich Spaltennummern angeben? –

+1

Nun, Sie haben gesagt "Datenrahmen bestehend aus ** zwei ** Spalten von Strings" :-) Bearbeitete meine Antwort. Das 'axis' Argument bezieht sich auf die Richtung der Iteration (Spalten oder Zeilen), also ist es nicht das, was Sie hier optimieren müssen. – alexis

+0

Total meine Schuld! Vielen Dank für die schnelle und vollständige Antwort! (-: –

Verwandte Themen