繁体   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