Напишите transform_func следующим образом:
- он должен иметь один параметр - текущая строка,
- эта функция можетчитать отдельные столбцы из текущей строки и использовать их,
- возвращаемый объект должен быть Series с:
- значениями - все, что вы хотите вернуть,
- index - имена целевых столбцов.
Пример. Предполагается, что все 3 столбца имеют тип string , сцепление A и B столбцы, добавьте "некоторую строку" к C :
def transform_func(row):
a = row.A; b = row.B; c = row.C;
return pd.Series([ a + b, c + '_xx'], index=['new_A', 'new_B'])
Чтобы получить только новые значения, примените этоФункция для каждой строки:
df.apply(transform_func, axis=1)
Обратите внимание, что результирующий DataFrame сохраняет ключи исходных строк (мы воспользуемся этой функцией через мгновение).
Или, если вы хотите добавьте эти новые столбцы в ваш DataFrame, объедините ваш df с результатом вышеупомянутого приложения, сохранив результат объединения воригинал df :
df = df.join(df.apply(transform_func, axis=1))
Редактировать после комментария по состоянию на 03: 36: 34Z
Использование zip , вероятно, самый медленный вариант. Функция на основе строк должна быть быстрее, и это более интуитивная конструкция. Вероятно, самый быстрый способ - написать 2 векторизованных выражения для каждого столбца отдельно. В этом случае что-то вроде:
df['new_A'] = df.A + df.B
df['new_B'] = df.C + '_xx'
Но, как правило, проблема в том, может ли основанная на строках функция быть выражена как векторизованные выражения (как я делал выше). В «отрицательном» случае вы можете применить основанную на строке функцию.
Чтобы сравнить, насколько быстро каждое решение, используйте % timeit .