加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 熊猫中的递归关系

发布时间:2020-12-16 22:30:44 所属栏目:Python 来源:网络整理
导读:我有一个DataFrame,df,在pandas中有系列df.A和df.B,我正在尝试创建第三个系列,df.C依赖于A和B以及之前的结果.那是: C [0] = A [0] C [n] = A [n] B [n] * C [n-1] 这样做最有效的方法是什么?理想情况下,我不必回到for循环. 编辑 这是给定A和B的C的期望输出

我有一个DataFrame,df,在pandas中有系列df.A和df.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)

06003

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读