如何将此功能应用于数据框?

时间:2020-02-19 20:26:54

标签: python dataframe new-operator

假设我有这个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]

1 个答案:

答案 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']])