Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 大熊猫的回归关系_Python_Pandas_Numpy - Fatal编程技术网

Python 大熊猫的回归关系

Python 大熊猫的回归关系,python,pandas,numpy,Python,Pandas,Numpy,我有一个数据帧,df,在熊猫系列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.DataFra

我有一个数据帧,
df
,在熊猫系列
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
试试这个:

C[0]=A[0]
C=[A[i]+B[i]*C[i-1]表示范围内的i(1,len(A))]


比循环快得多。

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

相反,您可以使用
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)



你能添加一个小的可重复的样本数据集和你想要的数据集吗?是关于金融数学吗?@MaxU是的,是的。谢谢他们-你可能想检查一下。你在问什么样的金融工具?它有点像固定利率抵押贷款吗?如果是的话,创建一个更真实的样本数据集是有意义的。。。
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)