Мне нужно применить несколько функций к строкам фрейма данных. Аргументы этих функций принимают значения из двух или более полей одной строки. Например:
d = {
'a': [1,1,1,1],
'b': [2,2,2,2],
'c': [3,3,3,3],
'd': [4,4,4,4]
}
df1 = pd.DataFrame(d)
def f1(x,y):
return x + 2*y
def f2(x,y):
return y + 2*x
df2 = pd.DataFrame()
df2['val1'] = df1.apply(lambda r: f1(r.a, r.b),1)
df2['val2'] = df1.apply(lambda r: f2(r.c, r.d),1)
Применяя каждую функцию по очереди, одну за другой, Панды делают отдельную итерацию по всем строкам фрейма данных. В этом примере Pandas дважды повторяет фрейм данных. В результате получаю:
In [10]: df2
Out[10]:
val1 val2
0 5 10
1 5 10
2 5 10
3 5 10
Есть ли способ применить две или более таких функций за один проход по фрейму данных? Таким образом, приложение должно возвращать значение для более чем одного поля подряд. Кроме того, этот случай включает в себя применение одной функции, возвращающей значения для более чем одного поля. Как это может быть сделано?