2016-05-03 3 views
0

マイデータフレームがfuzzywuzzy比率が1列には、最高の1

enter image description here

Matcher = df2['Account Name'] 

match = if df1['Billing Country'] == df2['Billing Country'] (process.extractOne(df1['Account Name'], Matcher)) 

上記のコードは動作していない100%の一致を満たしていれば、私は、アカウントのあいまい一致をしたいです国名が一致している場合にのみ名前を付けます。

+0

。 – Sam

+0

サム - あなたは、Billingの国で外側のマージを行い、各組み合わせのファジーマッチを探すことをお勧めしますか? –

答えて

0

私は少し違った方法で考え出しました。

は、最初に私は

merged_file = pd.merge(df2, df1, on='Billing Country', how = 'left') 

を使用してマージされたと私はすべての可能なマッチを持っていたとき。

私は上記の文字列としてfuzzywuzzyの

`Reference_data= df2['Account Name']` 

`Result = process.extractOne(df1, choices)` 

を適用するには、私がためにルックアップしたい各値の最も近いマッチを行いました。 後で比率を計算するためにもう1つの文字列を追加しました。あなたはおそらく完全外部、両方のデータフレームに参加組み合わせごとにFuzzyRatioを計算し、そして唯一の100%の一致を有するものに結果をフィルタリング何をすべきか

Result['ratio']= fuzz.ratio(Result['Account Name_x'],Result['Account Name_y']) 
1

ここに私が提案しているものがあります。まず、完全なデカルトは2つのDFSに参加:

df1.loc[:, 'MergeKey'] = 1 #create a mergekey 
df2.loc[:, 'MergeKey'] = 1 #it is the same for both so that when you merge you get the cartesian product 
#merge them to get the cartesian product (all possible combos) 
merged = df1.merge(df2, on = 'MergeKey', suffixes = ['_1', '_2']) 

その後、各コンボ用ファズ比を計算します。

def fuzzratio(row): 
    try: #avoid errors for example on NaN's 
     return fuzz.ratio(row['Billing Country_1'], row['Billing Country_2']) 
    except: 
     return 0. #you'll want to expiriment w/o the try/except too 
merged.loc[:, 'Ratio'] = merged.apply(fuzzratio, axis = 1) #create ratio column by applying function 

今、あなたはdf1['Billing Country']のすべての可能な組み合わせの間の比率でDFを持っている必要がありますおよびdf2['Billing Country']。一度そこにフィルタを設定すると、割合が100%のものを得ることができます。

+0

すみません。私が理解することは難しいです。 df1.loc [:, MergeKey '] = 1が何をしているのか説明してください。このコードでは 'MergeKey'は 'Account Name'です –

+0

私のコードはこれです 'merged_file = pd.merge(df2、df1、on = 'Billing Country'、how = 'outer')' –

+0

私は3,467,624回の試合があります私はそれを今すぐ保存することはできません。 'merged_file.to_excel( 'merged_file.xlsx') ' –

関連する問題