次の問題があります
次のような文を含むデータフレームマスターがあります
master
Out[8]:
original
0 this is a nice sentence
1 this is another one
2 stackoverflow is nice
Master のすべての行について、別の Dataframeスレーブを検索して、fuzzywuzzy
. 2 つのデータフレーム間で一致する文が少し異なる可能性があるため (余分な文字など)、fuzzywuzzy を使用します。
たとえば、スレーブは
slave
Out[10]:
my_value name
0 2 hello world
1 1 congratulations
2 2 this is a nice sentence
3 3 this is another one
4 1 stackoverflow is nice
これは、完全に機能し、素晴らしく、コンパクトな作業例です:)
from fuzzywuzzy import fuzz
import pandas as pd
import numpy as np
import difflib
master= pd.DataFrame({'original':['this is a nice sentence',
'this is another one',
'stackoverflow is nice']})
slave= pd.DataFrame({'name':['hello world',
'congratulations',
'this is a nice sentence ',
'this is another one',
'stackoverflow is nice'],'my_value': [2,1,2,3,1]})
def fuzzy_score(str1, str2):
return fuzz.token_set_ratio(str1, str2)
def helper(orig_string, slave_df):
#use fuzzywuzzy to see how close original and name are
slave_df['score'] = slave_df.name.apply(lambda x: fuzzy_score(x,orig_string))
#return my_value corresponding to the highest score
return slave_df.ix[slave_df.score.idxmax(),'my_value']
master['my_value'] = master.original.apply(lambda x: helper(x,slave))
100 万ドルの問題は、上記の適用コードを並列化できるかどうかです。
結局のところ、すべてmaster
の行がすべての行と比較されますslave
(スレーブは小さなデータセットであり、データの多くのコピーを RAM に保持できます)。
複数の比較を実行できなかった理由がわかりません (つまり、同時に複数の行を処理します)。
問題: それを行う方法がわかりません。または、それが可能かどうかもわかりません。
どんな助けでも大歓迎です!