df['total'] = df.apply(lambda r: r['price'] * r['qty'], axis=1)
Результат:
price qty total 0 10 2 20 1 5 4 20
df['total'] = df['price'] * df['qty'] # без apply
Результат:
(тот же результат, но без питоновского цикла)Порешать Python-задачи в тренажёре →
apply-vs-векторизация — популярный вопрос про производительность pandas. Ценят понимание, что apply гоняет питоновскую функцию построчно (медленно), а векторные операции считаются в C сразу над массивом. Умей заменить apply на векторную форму.
map работает только на Series и применяет функцию/словарь к каждому значению. apply шире: на Series — как map, на DataFrame — к строкам или столбцам. Для простого маппинга значений map быстрее и понятнее.
apply выполняет питоновскую функцию в цикле (особенно axis=1 — по строкам), без векторизации. На больших данных это в десятки раз медленнее векторных операций и .str/.dt аксессоров.
Арифметику — прямыми операциями над колонками, условия — np.where/np.select, строки — .str.*, даты — .dt.*, маппинг — .map/.replace. apply оставляй только когда векторной альтернативы нет.
Pandas: основы · NumPy векторизация
groupby · merge · pivot_table · value_counts · drop_duplicates · fillna
Открыть Python-тренажёр (556 задач) →