У меня есть два кадра данных с одинаковым количеством строк и столбцов. Я хотел бы создать третий фрейм данных, основанный на этих двух фреймах данных, который имеет те же измерения, что и два других фрейма данных. Каждая ячейка в третьем кадре данных должна быть результатом функции, примененной к соответствующим значениям ячейки в df1 и df2 соответственно.
т.е. если у меня есть
df1 = | 1 | 2 |
| 3 | 4 |
df2 = | 5 | 6 |
| 7 | 8 |
тогда df3 должен быть таким
df3 = | func(1, 5) | func(2, 6) |
| func(3, 7) | func(4, 8) |
У меня есть способ сделать это, который я не считаю слишком питоническим и не подходящим для больших информационных фреймов, и хотел бы знать, существует ли эффективный способ сделать это?
Функция, которую я хочу применить:
def smape3(y, yhat, axis=0):
all_zeros = not (np.any(y) and np.any(yhat))
if all_zeros:
return 0.0
return np.sum(np.abs(yhat - y), axis) / np.sum(np.abs(yhat + y), axis)
Может использоваться для создания единственного скалярного значения ИЛИ массива значений. В моем случае использования выше входные данные для функции были бы двумя скалярными значениями. So smape (1,5) = 0,66.