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)