2016-08-03 2 views
2

Ich habe d1 und d2 und ich möchte die beiden nach ID-Spalte zusammenführen. Die ID und ID2 stimmen jedoch nicht genau überein. Stattdessen ist ID die erste 8 Ziffer von ID2 (manchmal kann es die erste 6 Ziffer sein, oder manchmal kann es eine oder zwei Ziffern sein).Merge Dataframe durch regulären Ausdruck oder Fuzzy-Match

Ich verstehe, dass ich ID2 vorverarbeiten kann, um nur die ersten 8 Ziffern zu behalten. Ich kann jedoch nicht alle Situationen bewältigen.

Ich frage mich, gibt es eine erweiterte Möglichkeit, durch reguläre Ausdrücke für Fuzzy-Match zu verschmelzen? sagen wir, wenn die ersten 6 Ziffern übereinstimmen, dann fusionieren?

d1=pd.DataFrame({'ID':['00846U10','01381710'], 
         'count':[100,200]}) 
d2=pd.DataFrame({'ID2':['00846U101','013817101','02376R102'], 
       'value':[1,5,6]}) 
+0

Pre-Prozess-ID und ID2, um nur 6 Zeichen zu halten, wird das nicht funktionieren !! –

+0

@GauravDhama wird es nicht alle meine Situationen behandeln. die Frage aktualisiert – Lisa

+0

Also, Sie wollen sowohl "ID" und "ID2" in Scheiben schneiden, um 6 Ziffern zu enthalten, und wenn es eine Übereinstimmung gibt, dann die beiden Datenrahmen zusammenführen? –

Antwort

1

Geck,

ich das gleiche Problem und die einzige Lösung gehabt haben, andere Python-Pakete zu verwenden. Schauen Sie sich zum Beispiel fuzzywuzzy an. Es ist sehr gut.

Die allgemeine Idee ist, dass Sie für jede Zeile in d1 nach der Zeile in d2 suchen, die den höchsten Fuzzy-Matching-Score aufweist.

+0

Dank @Noobie würden Sie bitte einen Beispielcode posten? – Lisa

+0

sicher hier http://stackoverflow.com/questions/37979167/how-to-parallelize-many-fuzzy-string-comparisons-using-apply-in-pandas. Wenn Sie zufrieden sind, können Sie akzeptieren. Vielen Dank! –