簡體   English   中英

如何將此功能應用於數據幀?

[英]How to apply this function to a dataframe?

假設我有這個 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

並希望將此函數應用於每一行: log[(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]

通過df[['A', 'B', 'C']].diff(-1)對行.apply(lambda x: x * x) df[['A', 'B', 'C']].diff(-1) ,通過.apply(lambda x: x * x) (或.pow(2) )對結果.apply(lambda x: x * x)平方,通過.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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM