Панды — векторизация с помощью операторов if

#python #pandas #dataframe #data-science

Вопрос:

У меня есть такой код:

 #read data source into dataframe
adjustments_list = pd.read_csv('./first_case.csv', encoding = "UTF-16", sep = 't', parse_dates = ['Date'])

#match F/R and M/X meeting appropriate conditions
#represented by list of sets with two values - each value is id of adjustment, each set is relation
relation_list = []

def func_inner(outer, inner):
    if outer['ASIN'] == inner['ASIN']:
            if outer['reason_code'] == 'F' or outer['reason_code'] == 'R':
                if (inner['reason_code'] == 'M' or inner['reason_code'] == 'X') and (inner['Date'] - timedelta(days = 3)) <= outer['Date'] <= inner['Date']:
                    relation_list.append([outer.name, inner.name])
            if outer['reason_code'] == 'M' or outer['reason_code'] == 'X':
                if (inner['reason_code'] == 'F' or inner['reason_code'] == 'R') and inner['Date'] <= outer['Date'] <= (inner['Date']   timedelta(days = 3)):
                    relation_list.append([outer.name, inner.name])

def func(x):
    adjustments_list.apply(lambda row: func_inner(outer = x, inner = row), axis = 1)


adjustments_list.apply(lambda row: func(row), axis = 1)
 

Как я могу изменить свой подход, чтобы использовать не apply() функцию, а векторизацию?

Я пытался использовать этот ресурс: Ссылка, но я не знаю, как это реализовать в моем конкретном случае.

Ответ №1:

Насколько я понимаю, векторизация предназначена только для числовых операций. Если вы хотите ускорить свой код, вы можете использовать pandarallel, если используете Mac или Linux. Если вы работаете в Windows, вы можете вызвать python из WSL https://github.com/nalepae/pandarallel

Я не знаю о наивном хорошем инструменте в Windows для параллелизма панд. Другие могли бы помочь.