2017-03-10 9 views
0

私は、Pythonのファジー・ライブラリを使用してファジー・マッチングを行っている、パンダ・データ・フレームの2つの列に同じような名前のセットを持っています。Pythonパンダのベクトル化関数

import pandas as pd 
from fuzzywuzzy import fuzz 

datt = pd.read_csv("H:\\FuzzyMatch\\data.csv") 

#add column names for each library 
datt['ratio'] = "" 
datt['partial_ratio'] = "" 
datt['partial_token_set_ratio'] = "" 
datt['partial_token_sort_ratio'] = "" 
datt['QRatio'] = "" 
datt['token_set_ratio'] = "" 
datt['token_sort_ratio'] = "" 
datt['UQRatio'] = "" 
datt['UWRatio'] = "" 
datt['WRatio'] = "" 

#save score 
for i in range(datt.shape[0]): 
    datt.ratio.loc[i] = fuzz.ratio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.partial_ratio.loc[i] = fuzz.partial_ratio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.partial_token_set_ratio.loc[i] = fuzz.partial_token_set_ratio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.partial_token_sort_ratio.loc[i] = fuzz.partial_token_sort_ratio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.QRatio.loc[i] = fuzz.QRatio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.token_set_ratio.loc[i] = fuzz.token_set_ratio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.token_sort_ratio.loc[i] = fuzz.token_sort_ratio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.UQRatio.loc[i] = fuzz.UQRatio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.UWRatio.loc[i] = fuzz.UWRatio(datt.current_company[i],datt.crm_company_name[i]) 
    datt.WRatio.loc[i] = fuzz.WRatio(datt.current_company[i],datt.crm_company_name[i]) 

私はループを回避し、関数のベクトル化された形式を使用する方法はありますか?ループ内の各関数には2つのパラメータが必要です。

ありがとうございます!

答えて

1

データフレームに行単位で適用することができます。これ、私の意見では、あなたがループを回避することにより、少しクリーナーをコーディング行います

import pandas as pd 
def multiply(x,y): 
    return x*y 

df = pd.DataFrame({"a": range(1,10000), "b": range(1,10000)}) 

df["c"] = df.apply(lambda x: multiply(x.a, x.b), 1) 

- しかし私は、これはパフォーマンスを向上させないことを前提としています。ここでおもちゃの例です。

あなたがnumpy.vectorize使用することを試みることができる:私のおもちゃ例えば

import numpy as np 
df["c"] = np.vectorize(multiply, otypes=["O"]) (df.a, df.b) 

を、これはかなり速くなりますが、私はファジー機能が伴うかわからないので、私はそこを確認していません。

希望すると助かります!

関連する問題