[英]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.