Функция применения панд чрезвычайно медленная, каковы альтернативные способы более быстрой реализации - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть 2 кадра данных (сотрудник и набор), однако, между этими df нет уникального ключа.Я использую библиотечную функцию fuzzywuzzy для получения уникального идентификатора, для этого я использую функцию df.apply, но она очень медленная.Может кто-нибудь предложить более быструю реализацию?

#function to compare name beween 2 dfs.
def get_ratio(row, var1):
    #Get Ratio with all names #take highest and subset
    name1 = row.Offer_CandidateName
    name2 = row.Offer_FirstName
    name3 = row.Applicant_FirstName
    name4 = row.Candidate_FirstName
    #Compare dataframe based on name
    if(not pd.isnull(name1)):
        MatchScore1 = fuzz.partial_ratio(name1 , var1)
    if(not pd.isnull(name2)):
        MatchScore2 = fuzz.partial_ratio(name2 , var1)
    if(not pd.isnull(name3)):
        MatchScore3 = fuzz.partial_ratio(name3 , var1)
    if(not pd.isnull(name4)):
        MatchScore4 = fuzz.partial_ratio(name4 , var1)
    #if (MatchScore1>50 |MatchScore1>50 |MatchScore1>50 |MatchScore1>50):
    return max(MatchScore1,MatchScore2,MatchScore3,MatchScore4)

#Values are passed from employee dataframe to below function
def populateMatch(username,Emp_HireDate, Emp_RMID, Emp_FirstName): #Using Fuzzy Logic 
        #temp dataframe has names of candidate which need to be compared to all emp names
        temp = temp[temp.apply(get_ratio, var1 = Emp_FirstName, axis=1) > 50] 

        EmpMasterDF.loc[EmpMasterDF.Username == username , 'c6'] =  \
        str(temp['combined'].unique().tolist())
...