假设我有这个df:
i A B C
0 4 5 13
1 11 42 27
2 3 6 2.21
3 4 8 10
4 10 5 4
5 2 11 .5
,并希望将this函数应用于每一行: 日志[(df ['A']
$log((A_i - A_{i+1})^2+(B_i - B_{i+1})^2+(C_i - C_{i+1})^2)$
$log((A_i - A_{i+2})^2+(B_i - B_{i+2})^2+(C_i - C_{i+2})^2)$
.
.
.
$log((A_i - A_{i+5})^2+(B_i - B_{i+5})^2+(C_i - C_{i+5})^2)$
例如,对于i = 0和i = 1:
$log((4 - 11)^2+(5 - 42)^2+(13 - 27)^2)=3.2$
我有这个代码。但是不起作用。
for point in df:
x = [np.log((A[0]-A[1] )**2+ (B[0]-B[1] )**2+(C[0]-C[1] )**2) for x in df]
答案 0 :(得分:1)
通过Sub MoveOver()
'create variables
Dim lastRow As Long
'find lastRow
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
'change i to whatever your starting row is. Cells(i, #), the # indicates the column index
For i = 2 To lastRow
Cells(i, 5).Value = Cells(i, 4)
Cells(i, 4).Value = 0
Next i 'new loop starts
End Sub
向前移动行,通过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']])