gpt4 book ai didi

python - Pandas 中的递归关系

转载 作者:太空狗 更新时间:2023-10-30 01:19:09 25 4
gpt4 key购买 nike

我有一个 DataFrame,df,在 pandas 中有 df.Adf.B 系列,我正在尝试创建第三个系列, df.C 依赖于 A 和 B 以及之前的结果。即:

C[0]=A[0]

C[n]=A[n] + B[n]*C[n-1]

最有效的方法是什么?理想情况下,我不必退回​​到 for 循环。


编辑

这是给定 A 和 B 的 C 所需的输出。现在只需要弄清楚如何...

import pandas as pd

a = [ 2, 3,-8,-2, 1]
b = [ 1, 1, 4, 2, 1]
c = [ 2, 5,12,22,23]

df = pd.DataFrame({'A': a, 'B': b, 'C': c})
df

最佳答案

您可以使用令人讨厌的累积乘积将其矢量化并将其他矢量压缩在一起。但这最终不会为您节省时间。事实上,它可能在数值上不稳定。

相反,您可以使用 numba 来加速循环。

from numba import njit
import numpy as np
import pandas as pd

@njit
def dynamic_alpha(a, b):
c = a.copy()
for i in range(1, len(a)):
c[i] = a[i] + b[i] * c[i - 1]
return c

df.assign(C=dynamic_alpha(df.A.values, df.B.values))

A B C
0 2 1 2
1 3 1 5
2 -8 4 12
3 -2 2 22
4 1 1 23

对于这个简单的计算,这将和一个简单的计算一样快

df.assign(C=np.arange(len(df)) ** 2 + 2)

df = pd.concat([df] * 10000)
%timeit df.assign(C=dynamic_alpha(df.A.values, df.B.values))
%timeit df.assign(C=np.arange(len(df)) ** 2 + 2)

337 µs ± 5.87 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
333 µs ± 20.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

关于python - Pandas 中的递归关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49346604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com