с использованием применяются .
def f(x):
if x['gender'] == 'male' and x['pet1'] == x['pet2']: return 5
elif x['gender'] == 'female' and (x['pet1'] == 'cat' or x['pet1'] == 'dog'): return 5
else: return 0
data['points'] = data.apply(f, axis=1)
Функции, рекурсивные или нет, оцениваются, сначала оценивая все свои аргументы в неуказанном порядке, а затем вызывая функцию с ними.
Так, например, concat (reverse t, [h])
сначала оценит реверс, а затем вызовет concat.