Векторизация панд многострочного выражения - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть 50 000 x 50 фрейма данных (df1), на котором я запускаю многострочное выражение и добавляю результат в новый столбец.

Выражение ищет значение в другом фрейме данных (4000 x 12)в размере; df2) и возвращает строковое значение.

Выражение при применении через анонимную лямбда-функцию занимает около 2 минут на моем не слишком старом ноутбуке i5, поэтому я хотел бы векторизовать, но не могу понять, как.

Буду очень признателен за любые советы по векторизации.Я пытался посмотреть на numba.jit и numba.vectorize (или даже просто ворсистую векторизацию, но не могу понять это).

def myfunction(val1,val2,df2,col_name):
    #subset df2 before returning first value from passed col_name below
    df2_sub = df2.query('Col1 == "%s" and %d >= Col2 and %d <= Col3' % (val1,val2,val2))
    return df2_sub[col_name].iloc[0] #single string, I trap index errors in my real code using a try/except block

df1['new col'] = df1.apply(lambda row: myfunction(row['Col4'],row['Col5'],df2,'Col6'), axis=1) # this is effectively no better than a for loop
...