2016-08-03 9 views
2

私はd1とd2を持っていて、2つをID列でマージしたいとします。 ただし、IDとID2は完全に一致しません。代わりに、IDはID2の最初の8桁です(場合によっては最初の6桁になることもあれば、1桁または2桁異なることもあります)。データ・フレームを正規表現またはファジー・マッチでマージする

ID2を前処理して最初の8桁のみを保持できることを理解します。しかし、私はすべての状況を処理することはできません。

ファジィマッチの正規表現をマージする高度な方法はありますか?たとえば、最初の6桁が一致すれば、マージしますか?

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

前処理IDとID2は6文字しか保持できません。 –

+0

@GauravDhamaそれは私の状況のすべてを処理しません。質問を更新しました – Lisa

+0

したがって、IDとID2の両方をスライスして6桁の数字を含むようにしたい場合、一致するものがあれば、2つのデータフレームをマージしますか? –

答えて

1

男、

私は同じ問題があったし、唯一の解決策は、他のPythonパッケージを使用することです。たとえば、fuzzywuzzyをご覧ください。これはとてもいいです。

一般的な考え方は、d1のすべての行について、最も高いファジー一致スコアを持つd2の行を探します。

+0

ありがとう@Noobieサンプルコードを投稿してください。 – Lisa

+0

こちらをご覧くださいhttp://stackoverflow.com/questions/37979167/how-to-parallelize-many-fuzzy-string-comparisons-using-apply-in-pandasあなたが満足するならば、あなたは受け入れることができます。ありがとう! –