Разница строк вперед с помощью df[['A', 'B', 'C']].diff(-1)
, квадрат результата с помощью .apply(lambda x: x * x)
(или .pow(2)
), сумма результата с помощью .sum(axis=1)
и затем запись в лог этих сумм. Присвойте результат обратно фрейму данных.
>>> df.assign(result=np.log(df[['A', 'B', 'C']].diff(-1).apply(lambda x: x * x).sum(axis=1)))
i A B C result
0 0 4 5 13.00 7.386471 # np.log((4 - 11) ** 2 + (5 - 42) ** 2 + (13 - 27) ** 2) = 7.386...
1 1 11 42 27.00 7.588093
2 2 3 6 2.21 4.184857
3 3 4 8 10.00 4.394449
4 4 10 5 4.00 4.720729
5 5 2 11 0.50 -inf
В качестве альтернативы, чтобы отличать каждую строку от первой, используйте (df[['A', 'B', 'C']].iloc[0, :] - df[['A', 'B', 'C']])
. Все остальное тоже самое.
>>> df.assign(
result=np.log(
(df[['A', 'B', 'C']].iloc[0, :] - df[['A', 'B', 'C']]).pow(2).sum(axis=1))
)
i A B C result
0 0 4 5 13.00 -inf
1 1 11 42 27.00 7.386471
2 2 3 6 2.21 4.774272
3 3 4 8 10.00 2.890372
4 4 10 5 4.00 4.762174
5 5 2 11 0.50 5.279389